The branch, master has been updated via 55aeb68... s4-python: Move dsdb_convert_schema_to_openldap to dsdb. via 2a67eda... s4-python: Move set_opaque_integer -> dsdb. via ccd954f... s4-python: Avoid importing glue directly. via aed295b... s4-python: Remove convenience macro PyErr_SetStringError. via 8afd52a... s4-python: Move samdb_server_site_name to dsdb module. via 31a517e... s4-python: Move dsdb constants to a separate python module. from e5b33be... s4-python: Remove remaining constants.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 55aeb682ba157dc02d838381d1b5d9db166beaeb Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Apr 4 00:42:52 2010 +0200 s4-python: Move dsdb_convert_schema_to_openldap to dsdb. commit 2a67eda98f88f132443bc2b81ca2686bcc1775a6 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Apr 4 00:40:01 2010 +0200 s4-python: Move set_opaque_integer -> dsdb. commit ccd954f2a7534cc27afd17b23e2fc838e10cf6b3 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Apr 4 00:30:34 2010 +0200 s4-python: Avoid importing glue directly. commit aed295b97e649ef7db4300cc400bc2bd9b1a03b0 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Apr 4 00:22:29 2010 +0200 s4-python: Remove convenience macro PyErr_SetStringError. This macro assumed that all errors were runtime errors. commit 8afd52a6418125100a5e8a6a4312c0460e57ac88 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Apr 4 00:21:09 2010 +0200 s4-python: Move samdb_server_site_name to dsdb module. commit 31a517e1721fc0080473b376cd59c090cfab6456 Author: Jelmer Vernooij <jel...@samba.org> Date: Sun Apr 4 00:14:23 2010 +0200 s4-python: Move dsdb constants to a separate python module. ----------------------------------------------------------------------- Summary of changes: source4/auth/credentials/pycredentials.c | 2 +- source4/dsdb/config.mk | 6 + source4/dsdb/pydsdb.c | 212 ++++++++++++++++++++ source4/lib/ldb/tests/python/ldap.py | 7 +- source4/lib/ldb/tests/python/ldap_schema.py | 37 +--- source4/lib/ldb/tests/python/sec_descriptor.py | 6 +- source4/lib/ldb/tests/python/urgent_replication.py | 6 +- source4/libcli/util/pyerrors.h | 3 - source4/scripting/python/pyglue.c | 162 +--------------- source4/scripting/python/samba/__init__.py | 55 +---- .../scripting/python/samba/netcmd/domainlevel.py | 2 +- source4/scripting/python/samba/provision.py | 21 +- source4/scripting/python/samba/samdb.py | 5 +- source4/scripting/python/samba/upgradehelpers.py | 3 +- source4/setup/provision | 7 +- 15 files changed, 266 insertions(+), 268 deletions(-) create mode 100644 source4/dsdb/pydsdb.c Changeset truncated at 500 lines: diff --git a/source4/auth/credentials/pycredentials.c b/source4/auth/credentials/pycredentials.c index f5e8029..cd578a5 100644 --- a/source4/auth/credentials/pycredentials.c +++ b/source4/auth/credentials/pycredentials.c @@ -272,7 +272,7 @@ static PyObject *py_creds_get_named_ccache(py_talloc_Object *self, PyObject *arg return PyCredentialCacheContainer_from_ccache_container(ccc); } - PyErr_SetStringError(error_string); + PyErr_SetString(PyExc_RuntimeError, error_string); talloc_free(event_ctx); return NULL; diff --git a/source4/dsdb/config.mk b/source4/dsdb/config.mk index 356f732..69b7227 100644 --- a/source4/dsdb/config.mk +++ b/source4/dsdb/config.mk @@ -106,3 +106,9 @@ PRIVATE_DEPENDENCIES = \ DNS_UPDATE_SRV_OBJ_FILES = $(addprefix $(dsdbsrcdir)/dns/, \ dns_update.o) + +[PYTHON::python_dsdb] +LIBRARY_REALNAME = samba/dsdb.$(SHLIBEXT) +PRIVATE_DEPENDENCIES = SAMDB + +python_dsdb_OBJ_FILES = $(dsdbsrcdir)/pydsdb.o diff --git a/source4/dsdb/pydsdb.c b/source4/dsdb/pydsdb.c new file mode 100644 index 0000000..6e3e50a --- /dev/null +++ b/source4/dsdb/pydsdb.c @@ -0,0 +1,212 @@ +/* + Unix SMB/CIFS implementation. + Copyright (C) Jelmer Vernooij <jel...@samba.org> 2007-2010 + Copyright (C) Matthias Dieter Wallnöfer 2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <Python.h> +#include "includes.h" +#include "dsdb/samdb/samdb.h" +#include "lib/ldb/pyldb.h" + +/* FIXME: These should be in a header file somewhere, once we finish moving + * away from SWIG .. */ +#define PyErr_LDB_OR_RAISE(py_ldb, ldb) \ +/* if (!PyLdb_Check(py_ldb)) { \ + PyErr_SetString(py_ldb_get_exception(), "Ldb connection object required"); \ + return NULL; \ + } */\ + ldb = PyLdb_AsLdbContext(py_ldb); + +static PyObject *py_samdb_server_site_name(PyObject *self, PyObject *args) +{ + PyObject *py_ldb, *result; + struct ldb_context *ldb; + const char *site; + TALLOC_CTX *mem_ctx; + + if (!PyArg_ParseTuple(args, "O", &py_ldb)) + return NULL; + + PyErr_LDB_OR_RAISE(py_ldb, ldb); + + mem_ctx = talloc_new(NULL); + + site = samdb_server_site_name(ldb, mem_ctx); + if (site == NULL) { + PyErr_SetString(PyExc_RuntimeError, "Failed to find server site"); + talloc_free(mem_ctx); + return NULL; + } + + result = PyString_FromString(site); + talloc_free(mem_ctx); + return result; +} + +/* XXX: This function really should be in pyldb.c */ +static PyObject *py_dsdb_set_opaque_integer(PyObject *self, PyObject *args) +{ + PyObject *py_ldb; + int value; + int *old_val, *new_val; + char *py_opaque_name, *opaque_name_talloc; + struct ldb_context *ldb; + TALLOC_CTX *tmp_ctx; + + if (!PyArg_ParseTuple(args, "Osi", &py_ldb, &py_opaque_name, &value)) + return NULL; + + PyErr_LDB_OR_RAISE(py_ldb, ldb); + + /* see if we have a cached copy */ + old_val = (int *)ldb_get_opaque(ldb, py_opaque_name); + /* XXX: We shouldn't just blindly assume that the value that is + * already present has the size of an int and is not shared + * with other code that may rely on it not changing. + * JRV 20100403 */ + + if (old_val) { + *old_val = value; + Py_RETURN_NONE; + } + + tmp_ctx = talloc_new(ldb); + if (tmp_ctx == NULL) { + PyErr_NoMemory(); + return NULL; + } + + new_val = talloc(tmp_ctx, int); + if (new_val == NULL) { + talloc_free(tmp_ctx); + PyErr_NoMemory(); + return NULL; + } + + opaque_name_talloc = talloc_strdup(tmp_ctx, py_opaque_name); + if (opaque_name_talloc == NULL) { + talloc_free(tmp_ctx); + PyErr_NoMemory(); + return NULL; + } + + *new_val = value; + + /* cache the domain_sid in the ldb */ + if (ldb_set_opaque(ldb, opaque_name_talloc, new_val) != LDB_SUCCESS) { + talloc_free(tmp_ctx); + PyErr_SetString(PyExc_RuntimeError, + "Failed to set opaque integer into the ldb"); + return NULL; + } + + talloc_steal(ldb, new_val); + talloc_steal(ldb, opaque_name_talloc); + talloc_free(tmp_ctx); + + Py_RETURN_NONE; +} + +static PyObject *py_dsdb_convert_schema_to_openldap(PyObject *self, + PyObject *args) +{ + char *target_str, *mapping; + PyObject *py_ldb; + struct ldb_context *ldb; + PyObject *ret; + char *retstr; + + if (!PyArg_ParseTuple(args, "Oss", &py_ldb, &target_str, &mapping)) + return NULL; + + PyErr_LDB_OR_RAISE(py_ldb, ldb); + + retstr = dsdb_convert_schema_to_openldap(ldb, target_str, mapping); + if (retstr == NULL) { + PyErr_SetString(PyExc_RuntimeError, + "dsdb_convert_schema_to_openldap failed"); + return NULL; + } + + ret = PyString_FromString(retstr); + talloc_free(retstr); + return ret; +} + +static PyMethodDef py_dsdb_methods[] = { + { "samdb_server_site_name", (PyCFunction)py_samdb_server_site_name, + METH_VARARGS, "Get the server site name as a string"}, + { "dsdb_set_opaque_integer", (PyCFunction)py_dsdb_set_opaque_integer, + METH_VARARGS, NULL }, + { "dsdb_convert_schema_to_openldap", + (PyCFunction)py_dsdb_convert_schema_to_openldap, METH_VARARGS, + "dsdb_convert_schema_to_openldap(ldb, target_str, mapping) -> str\n" + "Create an OpenLDAP schema from a schema." }, + { NULL } +}; + +void initdsdb(void) +{ + PyObject *m; + + m = Py_InitModule3("dsdb", py_dsdb_methods, + "Python bindings for the directory service databases."); + if (m == NULL) + return; + + /* "userAccountControl" flags */ + PyModule_AddObject(m, "UF_NORMAL_ACCOUNT", PyInt_FromLong(UF_NORMAL_ACCOUNT)); + PyModule_AddObject(m, "UF_TEMP_DUPLICATE_ACCOUNT", PyInt_FromLong(UF_TEMP_DUPLICATE_ACCOUNT)); + PyModule_AddObject(m, "UF_SERVER_TRUST_ACCOUNT", PyInt_FromLong(UF_SERVER_TRUST_ACCOUNT)); + PyModule_AddObject(m, "UF_WORKSTATION_TRUST_ACCOUNT", PyInt_FromLong(UF_WORKSTATION_TRUST_ACCOUNT)); + PyModule_AddObject(m, "UF_INTERDOMAIN_TRUST_ACCOUNT", PyInt_FromLong(UF_INTERDOMAIN_TRUST_ACCOUNT)); + PyModule_AddObject(m, "UF_PASSWD_NOTREQD", PyInt_FromLong(UF_PASSWD_NOTREQD)); + PyModule_AddObject(m, "UF_ACCOUNTDISABLE", PyInt_FromLong(UF_ACCOUNTDISABLE)); + + /* "groupType" flags */ + PyModule_AddObject(m, "GTYPE_SECURITY_BUILTIN_LOCAL_GROUP", PyInt_FromLong(GTYPE_SECURITY_BUILTIN_LOCAL_GROUP)); + PyModule_AddObject(m, "GTYPE_SECURITY_GLOBAL_GROUP", PyInt_FromLong(GTYPE_SECURITY_GLOBAL_GROUP)); + PyModule_AddObject(m, "GTYPE_SECURITY_DOMAIN_LOCAL_GROUP", PyInt_FromLong(GTYPE_SECURITY_DOMAIN_LOCAL_GROUP)); + PyModule_AddObject(m, "GTYPE_SECURITY_UNIVERSAL_GROUP", PyInt_FromLong(GTYPE_SECURITY_UNIVERSAL_GROUP)); + PyModule_AddObject(m, "GTYPE_DISTRIBUTION_GLOBAL_GROUP", PyInt_FromLong(GTYPE_DISTRIBUTION_GLOBAL_GROUP)); + PyModule_AddObject(m, "GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP", PyInt_FromLong(GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP)); + PyModule_AddObject(m, "GTYPE_DISTRIBUTION_UNIVERSAL_GROUP", PyInt_FromLong(GTYPE_DISTRIBUTION_UNIVERSAL_GROUP)); + + /* "sAMAccountType" flags */ + PyModule_AddObject(m, "ATYPE_NORMAL_ACCOUNT", PyInt_FromLong(ATYPE_NORMAL_ACCOUNT)); + PyModule_AddObject(m, "ATYPE_WORKSTATION_TRUST", PyInt_FromLong(ATYPE_WORKSTATION_TRUST)); + PyModule_AddObject(m, "ATYPE_INTERDOMAIN_TRUST", PyInt_FromLong(ATYPE_INTERDOMAIN_TRUST)); + PyModule_AddObject(m, "ATYPE_SECURITY_GLOBAL_GROUP", PyInt_FromLong(ATYPE_SECURITY_GLOBAL_GROUP)); + PyModule_AddObject(m, "ATYPE_SECURITY_LOCAL_GROUP", PyInt_FromLong(ATYPE_SECURITY_LOCAL_GROUP)); + PyModule_AddObject(m, "ATYPE_SECURITY_UNIVERSAL_GROUP", PyInt_FromLong(ATYPE_SECURITY_UNIVERSAL_GROUP)); + PyModule_AddObject(m, "ATYPE_DISTRIBUTION_GLOBAL_GROUP", PyInt_FromLong(ATYPE_DISTRIBUTION_GLOBAL_GROUP)); + PyModule_AddObject(m, "ATYPE_DISTRIBUTION_LOCAL_GROUP", PyInt_FromLong(ATYPE_DISTRIBUTION_LOCAL_GROUP)); + PyModule_AddObject(m, "ATYPE_DISTRIBUTION_UNIVERSAL_GROUP", PyInt_FromLong(ATYPE_DISTRIBUTION_UNIVERSAL_GROUP)); + + /* "domainFunctionality", "forestFunctionality" flags in the rootDSE */ + PyModule_AddObject(m, "DS_DOMAIN_FUNCTION_2000", PyInt_FromLong(DS_DOMAIN_FUNCTION_2000)); + PyModule_AddObject(m, "DS_DOMAIN_FUNCTION_2003_MIXED", PyInt_FromLong(DS_DOMAIN_FUNCTION_2003_MIXED)); + PyModule_AddObject(m, "DS_DOMAIN_FUNCTION_2003", PyInt_FromLong(DS_DOMAIN_FUNCTION_2003)); + PyModule_AddObject(m, "DS_DOMAIN_FUNCTION_2008", PyInt_FromLong(DS_DOMAIN_FUNCTION_2008)); + PyModule_AddObject(m, "DS_DOMAIN_FUNCTION_2008_R2", PyInt_FromLong(DS_DOMAIN_FUNCTION_2008_R2)); + + /* "domainControllerFunctionality" flags in the rootDSE */ + PyModule_AddObject(m, "DS_DC_FUNCTION_2000", PyInt_FromLong(DS_DC_FUNCTION_2000)); + PyModule_AddObject(m, "DS_DC_FUNCTION_2003", PyInt_FromLong(DS_DC_FUNCTION_2003)); + PyModule_AddObject(m, "DS_DC_FUNCTION_2008", PyInt_FromLong(DS_DC_FUNCTION_2008)); + PyModule_AddObject(m, "DS_DC_FUNCTION_2008_R2", PyInt_FromLong(DS_DC_FUNCTION_2008_R2)); +} diff --git a/source4/lib/ldb/tests/python/ldap.py b/source4/lib/ldb/tests/python/ldap.py index 4f35ead..aa1febd 100755 --- a/source4/lib/ldb/tests/python/ldap.py +++ b/source4/lib/ldb/tests/python/ldap.py @@ -24,10 +24,9 @@ from ldb import ERR_UNDEFINED_ATTRIBUTE_TYPE from ldb import Message, MessageElement, Dn from ldb import FLAG_MOD_ADD, FLAG_MOD_REPLACE, FLAG_MOD_DELETE from samba import Ldb -from samba import UF_NORMAL_ACCOUNT -from samba import UF_WORKSTATION_TRUST_ACCOUNT -from samba import UF_PASSWD_NOTREQD, UF_ACCOUNTDISABLE -from samba import ATYPE_NORMAL_ACCOUNT, ATYPE_WORKSTATION_TRUST +from samba.dsdb import (UF_NORMAL_ACCOUNT, UF_WORKSTATION_TRUST_ACCOUNT, + UF_PASSWD_NOTREQD, UF_ACCOUNTDISABLE, ATYPE_NORMAL_ACCOUNT, + ATYPE_WORKSTATION_TRUST) from subunit.run import SubunitTestRunner import unittest diff --git a/source4/lib/ldb/tests/python/ldap_schema.py b/source4/lib/ldb/tests/python/ldap_schema.py index 4ed1d1c..932ef46 100755 --- a/source4/lib/ldb/tests/python/ldap_schema.py +++ b/source4/lib/ldb/tests/python/ldap_schema.py @@ -2,12 +2,10 @@ # -*- coding: utf-8 -*- # This is a port of the original in testprogs/ejs/ldap.js -import getopt import optparse import sys import time import random -import base64 import os sys.path.append("bin/python") @@ -15,41 +13,18 @@ sys.path.append("bin/python") import samba.getopt as options from samba.auth import system_session -from ldb import SCOPE_SUBTREE, SCOPE_ONELEVEL, SCOPE_BASE, LdbError -from ldb import ERR_NO_SUCH_OBJECT, ERR_ATTRIBUTE_OR_VALUE_EXISTS -from ldb import ERR_ENTRY_ALREADY_EXISTS, ERR_UNWILLING_TO_PERFORM -from ldb import ERR_NOT_ALLOWED_ON_NON_LEAF, ERR_OTHER, ERR_INVALID_DN_SYNTAX -from ldb import ERR_NO_SUCH_ATTRIBUTE, ERR_INSUFFICIENT_ACCESS_RIGHTS -from ldb import ERR_OBJECT_CLASS_VIOLATION, ERR_NOT_ALLOWED_ON_RDN -from ldb import ERR_NAMING_VIOLATION, ERR_CONSTRAINT_VIOLATION -from ldb import ERR_UNDEFINED_ATTRIBUTE_TYPE +from ldb import SCOPE_ONELEVEL, SCOPE_BASE, LdbError +from ldb import ERR_NO_SUCH_OBJECT +from ldb import ERR_UNWILLING_TO_PERFORM +from ldb import ERR_CONSTRAINT_VIOLATION from ldb import Message, MessageElement, Dn -from ldb import FLAG_MOD_ADD, FLAG_MOD_REPLACE, FLAG_MOD_DELETE +from ldb import FLAG_MOD_REPLACE from samba import Ldb -from samba import UF_NORMAL_ACCOUNT, UF_TEMP_DUPLICATE_ACCOUNT -from samba import UF_SERVER_TRUST_ACCOUNT, UF_WORKSTATION_TRUST_ACCOUNT -from samba import UF_INTERDOMAIN_TRUST_ACCOUNT -from samba import UF_PASSWD_NOTREQD, UF_ACCOUNTDISABLE -from samba import GTYPE_SECURITY_BUILTIN_LOCAL_GROUP -from samba import GTYPE_SECURITY_GLOBAL_GROUP, GTYPE_SECURITY_DOMAIN_LOCAL_GROUP -from samba import GTYPE_SECURITY_UNIVERSAL_GROUP -from samba import GTYPE_DISTRIBUTION_GLOBAL_GROUP -from samba import GTYPE_DISTRIBUTION_DOMAIN_LOCAL_GROUP -from samba import GTYPE_DISTRIBUTION_UNIVERSAL_GROUP -from samba import ATYPE_NORMAL_ACCOUNT, ATYPE_WORKSTATION_TRUST -from samba import ATYPE_SECURITY_GLOBAL_GROUP, ATYPE_SECURITY_LOCAL_GROUP -from samba import ATYPE_SECURITY_UNIVERSAL_GROUP -from samba import ATYPE_DISTRIBUTION_GLOBAL_GROUP -from samba import ATYPE_DISTRIBUTION_LOCAL_GROUP -from samba import ATYPE_DISTRIBUTION_UNIVERSAL_GROUP -from samba import DS_DC_FUNCTION_2003 +from samba.dsdb import DS_DC_FUNCTION_2003 from subunit.run import SubunitTestRunner import unittest -from samba.ndr import ndr_pack, ndr_unpack -from samba.dcerpc import security - parser = optparse.OptionParser("ldap [options] <host>") sambaopts = options.SambaOptions(parser) parser.add_option_group(sambaopts) diff --git a/source4/lib/ldb/tests/python/sec_descriptor.py b/source4/lib/ldb/tests/python/sec_descriptor.py index 8b2a879..30f82e6 100755 --- a/source4/lib/ldb/tests/python/sec_descriptor.py +++ b/source4/lib/ldb/tests/python/sec_descriptor.py @@ -13,15 +13,15 @@ sys.path.append("bin/python") import samba.getopt as options # Some error messages that are being tested -from ldb import SCOPE_SUBTREE, SCOPE_BASE, LdbError -from ldb import ERR_NO_SUCH_OBJECT +from ldb import SCOPE_SUBTREE, SCOPE_BASE, LdbError, ERR_NO_SUCH_OBJECT # For running the test unit from samba.ndr import ndr_pack, ndr_unpack from samba.dcerpc import security +from samba import Ldb from samba.auth import system_session -from samba import Ldb, DS_DOMAIN_FUNCTION_2008 +from samba.dsdb import DS_DOMAIN_FUNCTION_2008 from samba.dcerpc.security import ( SECINFO_OWNER, SECINFO_GROUP, SECINFO_DACL, SECINFO_SACL) from subunit.run import SubunitTestRunner diff --git a/source4/lib/ldb/tests/python/urgent_replication.py b/source4/lib/ldb/tests/python/urgent_replication.py index 28b3a5f..86d6d65 100755 --- a/source4/lib/ldb/tests/python/urgent_replication.py +++ b/source4/lib/ldb/tests/python/urgent_replication.py @@ -13,10 +13,8 @@ sys.path.append("../lib/testtools") import samba.getopt as options from samba.auth import system_session -from ldb import SCOPE_BASE, LdbError -from ldb import ERR_NO_SUCH_OBJECT -from ldb import Message, MessageElement, Dn -from ldb import FLAG_MOD_REPLACE +from ldb import (SCOPE_BASE, LdbError, ERR_NO_SUCH_OBJECT, Message, + MessageElement, Dn, FLAG_MOD_REPLACE) from samba import Ldb from samba import glue diff --git a/source4/libcli/util/pyerrors.h b/source4/libcli/util/pyerrors.h index 3fd2a7c..4c526c6 100644 --- a/source4/libcli/util/pyerrors.h +++ b/source4/libcli/util/pyerrors.h @@ -26,9 +26,6 @@ #define PyErr_FromString(str) Py_BuildValue("(s)", discard_const_p(char, str)) -#define PyErr_SetStringError(str) \ - PyErr_SetObject(PyExc_RuntimeError, PyErr_FromString(str)) - #define PyErr_SetWERROR(err) \ PyErr_SetObject(PyExc_RuntimeError, PyErr_FromWERROR(err)) diff --git a/source4/scripting/python/pyglue.c b/source4/scripting/python/pyglue.c index 37d75cd..b75d7d3 100644 --- a/source4/scripting/python/pyglue.c +++ b/source4/scripting/python/pyglue.c @@ -277,63 +277,6 @@ static PyObject *py_dsdb_set_ntds_invocation_id(PyObject *self, PyObject *args) Py_RETURN_NONE; } -static PyObject *py_dsdb_set_opaque_integer(PyObject *self, PyObject *args) -{ - PyObject *py_ldb; - int value; - int *old_val, *new_val; - char *py_opaque_name, *opaque_name_talloc; - struct ldb_context *ldb; - TALLOC_CTX *tmp_ctx; - - if (!PyArg_ParseTuple(args, "Osi", &py_ldb, &py_opaque_name, &value)) - return NULL; - - PyErr_LDB_OR_RAISE(py_ldb, ldb); - - /* see if we have a cached copy */ - old_val = (int *)ldb_get_opaque(ldb, - py_opaque_name); - - if (old_val) { - *old_val = value; - Py_RETURN_NONE; - } - - tmp_ctx = talloc_new(ldb); - if (tmp_ctx == NULL) { - goto failed; - } - - new_val = talloc(tmp_ctx, int); - if (!new_val) { - goto failed; - } - - opaque_name_talloc = talloc_strdup(tmp_ctx, py_opaque_name); - if (!opaque_name_talloc) { - goto failed; - } - - *new_val = value; - - /* cache the domain_sid in the ldb */ - if (ldb_set_opaque(ldb, opaque_name_talloc, new_val) != LDB_SUCCESS) { - goto failed; - } - - talloc_steal(ldb, new_val); - talloc_steal(ldb, opaque_name_talloc); - talloc_free(tmp_ctx); - - Py_RETURN_NONE; - -failed: - talloc_free(tmp_ctx); - PyErr_SetString(PyExc_RuntimeError, "Failed to set opaque integer into the ldb!\n"); - return NULL; -} - static PyObject *py_dsdb_set_global_schema(PyObject *self, PyObject *args) { PyObject *py_ldb; @@ -368,29 +311,6 @@ static PyObject *py_dsdb_set_schema_from_ldif(PyObject *self, PyObject *args) Py_RETURN_NONE; } -static PyObject *py_dsdb_convert_schema_to_openldap(PyObject *self, PyObject *args) -{ - char *target_str, *mapping; - PyObject *py_ldb; - struct ldb_context *ldb; - PyObject *ret; - char *retstr; - - if (!PyArg_ParseTuple(args, "Oss", &py_ldb, &target_str, &mapping)) - return NULL; - - PyErr_LDB_OR_RAISE(py_ldb, ldb); - - retstr = dsdb_convert_schema_to_openldap(ldb, target_str, mapping); - if (!retstr) { - PyErr_SetString(PyExc_RuntimeError, "dsdb_convert_schema_to_openldap failed"); - return NULL; - } - ret = PyString_FromString(retstr); - talloc_free(retstr); - return ret; -} - static PyObject *py_dsdb_write_prefixes_from_schema_to_ldb(PyObject *self, PyObject *args) { PyObject *py_ldb; @@ -486,11 +406,8 @@ static PyObject *py_dsdb_load_partition_usn(PyObject *self, PyObject *args) return result; - } - - static PyObject *py_samdb_ntds_invocation_id(PyObject *self, PyObject *args) { PyObject *py_ldb, *result; @@ -513,7 +430,7 @@ static PyObject *py_samdb_ntds_invocation_id(PyObject *self, PyObject *args) guid = samdb_ntds_invocation_id(ldb); if (guid == NULL) { - PyErr_SetStringError("Failed to find NTDS invocation ID"); + PyErr_SetString(PyExc_RuntimeError, "Failed to find NTDS invocation ID"); talloc_free(mem_ctx); return NULL; -- Samba Shared Repository