s4 python: Add a function to get the oid of an attribute when the attid is known
authorMatthieu Patou <mat@matws.net>
Mon, 12 Apr 2010 20:51:00 +0000 (00:51 +0400)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 15 Apr 2010 16:45:41 +0000 (18:45 +0200)
This function is mainly to help decoding replPropertyMetaData in python

Signed-off-by: Jelmer Vernooij <jelmer@samba.org>
source4/dsdb/pydsdb.c

index 1d71c6b7dedee1ed026119ec07ccf978f4514878..39f20672ced6814744178453df326daa448d5e35 100644 (file)
@@ -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 },