[PATCH 4/6] s4 python: Add a function to get the oid of an attribute when the attid is known

Matthieu Patou mat at matws.net
Mon Apr 12 14:51:00 MDT 2010


This function is mainly to help decoding replPropertyMetaData in python
---
 source4/dsdb/pydsdb.c |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/source4/dsdb/pydsdb.c b/source4/dsdb/pydsdb.c
index 1d71c6b..39f2067 100644
--- a/source4/dsdb/pydsdb.c
+++ b/source4/dsdb/pydsdb.c
@@ -19,6 +19,7 @@
 
 #include <Python.h>
 #include "includes.h"
+#include "libcli/util/pyerrors.h"
 #include "dsdb/samdb/samdb.h"
 #include "lib/ldb/pyldb.h"
 #include "libcli/security/security.h"
@@ -183,6 +184,40 @@ static PyObject *py_samdb_ntds_invocation_id(PyObject *self, PyObject *args)
 	return result;
 }
 
+static PyObject *py_dsdb_get_oid_from_attid(PyObject *self, PyObject *args)
+{
+	PyObject *py_ldb;
+	struct ldb_context *ldb;
+	uint32_t attid;
+	struct dsdb_schema *schema;
+	const char *oid;
+	TALLOC_CTX *mem_ctx;
+	WERROR status;
+
+	mem_ctx = talloc_new(NULL);
+	if (mem_ctx == NULL) {
+	   PyErr_NoMemory();
+	   return NULL;
+	}
+
+	if (!PyArg_ParseTuple(args, "Oi", &py_ldb, &attid))
+		return NULL;
+
+	PyErr_LDB_OR_RAISE(py_ldb, ldb);
+
+	schema = dsdb_get_schema(ldb, NULL);
+
+	if (!schema) {
+		PyErr_SetString(PyExc_RuntimeError, "Failed to find a schema from ldb \n");
+		return NULL;
+	}
+        status = dsdb_schema_pfm_oid_from_attid(schema->prefixmap, attid,
+	                                                mem_ctx, &oid);
+	PyErr_WERROR_IS_ERR_RAISE(status);
+
+	return PyString_FromString(oid);
+}
+
 static PyObject *py_dsdb_set_ntds_invocation_id(PyObject *self, PyObject *args)
 {
 	PyObject *py_ldb, *py_guid;
@@ -314,6 +349,8 @@ static PyMethodDef py_dsdb_methods[] = {
 		"Get SID of domain in use." },
 	{ "samdb_ntds_invocation_id", (PyCFunction)py_samdb_ntds_invocation_id,
 		METH_VARARGS, "get the NTDS invocation ID GUID as a string"},
+	{ "dsdb_get_oid_from_attid", (PyCFunction)py_dsdb_get_oid_from_attid, METH_VARARGS,
+		NULL },
 	{ "dsdb_set_ntds_invocation_id",
 		(PyCFunction)py_dsdb_set_ntds_invocation_id, METH_VARARGS,
 		NULL },
-- 
1.6.3.3


--------------010804020208020700020704
Content-Type: text/x-patch;
 name="0006-s4-python-add-a-unit-test-for-function-dsdb_get_oid_.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename*0="0006-s4-python-add-a-unit-test-for-function-dsdb_get_oid_.pa";
 filename*1="tch"



More information about the samba-technical mailing list