Author: jelmer Date: 2007-12-16 17:17:37 +0000 (Sun, 16 Dec 2007) New Revision: 26477
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26477 Log: Allow setting loadparm context for a ldb context in python, plus some other minor improvements. Modified: branches/SAMBA_4_0/ branches/SAMBA_4_0/source/auth/config.mk branches/SAMBA_4_0/source/scripting/python/misc.i branches/SAMBA_4_0/source/scripting/python/misc.py branches/SAMBA_4_0/source/scripting/python/misc_wrap.c branches/SAMBA_4_0/source/scripting/python/samba/__init__.py Changeset: Property changes on: branches/SAMBA_4_0 ___________________________________________________________________ Name: bzr:revision-info ...skipped... Name: bzr:revision-id:v3-trunk0 ...skipped... Modified: branches/SAMBA_4_0/source/auth/config.mk =================================================================== --- branches/SAMBA_4_0/source/auth/config.mk 2007-12-16 16:19:43 UTC (rev 26476) +++ branches/SAMBA_4_0/source/auth/config.mk 2007-12-16 17:17:37 UTC (rev 26477) @@ -11,7 +11,7 @@ [SUBSYSTEM::auth_system_session] OBJ_FILES = system_session.o PUBLIC_PROTO_HEADER = system_session_proto.h -PRIVATE_DEPENDENCIES = auth_session LIBSAMBA-UTIL +PRIVATE_DEPENDENCIES = auth_session LIBSAMBA-UTIL LIBSECURITY [SUBSYSTEM::auth_sam] PRIVATE_PROTO_HEADER = auth_sam.h Modified: branches/SAMBA_4_0/source/scripting/python/misc.i =================================================================== --- branches/SAMBA_4_0/source/scripting/python/misc.i 2007-12-16 16:19:43 UTC (rev 26476) +++ branches/SAMBA_4_0/source/scripting/python/misc.i 2007-12-16 17:17:37 UTC (rev 26477) @@ -21,6 +21,7 @@ %{ #include "includes.h" #include "ldb.h" +#include "param/param.h" %} %import "stdint.i" @@ -28,6 +29,7 @@ %import "../../lib/talloc/talloc.i" %import "../../lib/ldb/ldb.i" %import "../../auth/credentials/credentials.i" +%import "../../param/param.i" %rename(random_password) generate_random_str; char *generate_random_str(TALLOC_CTX *mem_ctx, size_t len); @@ -37,4 +39,16 @@ { ldb_set_opaque(ldb, "credentials", creds); } + +#if 0 /* Fails to link.. */ +void ldb_set_session_info(struct ldb_context *ldb, struct auth_session_info *session_info) +{ + ldb_set_opaque(ldb, "sessionInfo", session_info); +} +#endif + +void ldb_set_loadparm(struct ldb_context *ldb, struct loadparm_context *lp_ctx) +{ + ldb_set_opaque(ldb, "loadparm", lp_ctx); +} %} Modified: branches/SAMBA_4_0/source/scripting/python/misc.py =================================================================== --- branches/SAMBA_4_0/source/scripting/python/misc.py 2007-12-16 16:19:43 UTC (rev 26476) +++ branches/SAMBA_4_0/source/scripting/python/misc.py 2007-12-16 17:17:37 UTC (rev 26477) @@ -62,5 +62,6 @@ import param random_password = _misc.random_password ldb_set_credentials = _misc.ldb_set_credentials +ldb_set_loadparm = _misc.ldb_set_loadparm Modified: branches/SAMBA_4_0/source/scripting/python/misc_wrap.c =================================================================== --- branches/SAMBA_4_0/source/scripting/python/misc_wrap.c 2007-12-16 16:19:43 UTC (rev 26476) +++ branches/SAMBA_4_0/source/scripting/python/misc_wrap.c 2007-12-16 17:17:37 UTC (rev 26477) @@ -2524,6 +2524,7 @@ #include "includes.h" #include "ldb.h" +#include "param/param.h" SWIGINTERN int @@ -2702,6 +2703,18 @@ ldb_set_opaque(ldb, "credentials", creds); } +#if 0 /* Fails to link.. */ +void ldb_set_session_info(struct ldb_context *ldb, struct auth_session_info *session_info) +{ + ldb_set_opaque(ldb, "sessionInfo", session_info); +} +#endif + +void ldb_set_loadparm(struct ldb_context *ldb, struct loadparm_context *lp_ctx) +{ + ldb_set_opaque(ldb, "loadparm", lp_ctx); +} + #ifdef __cplusplus extern "C" { #endif @@ -2777,9 +2790,53 @@ } +SWIGINTERN PyObject *_wrap_ldb_set_loadparm(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) { + PyObject *resultobj = 0; + struct ldb_context *arg1 = (struct ldb_context *) 0 ; + struct loadparm_context *arg2 = (struct loadparm_context *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + char * kwnames[] = { + (char *) "Ldb",(char *) "lp_ctx", NULL + }; + + { + arg2 = loadparm_init(NULL); + } + if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"O|O:ldb_set_loadparm",kwnames,&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_set_loadparm" "', argument " "1"" of type '" "struct ldb_context *""'"); + } + arg1 = (struct ldb_context *)(argp1); + if (obj1) { + res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_loadparm_context, 0 | 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_set_loadparm" "', argument " "2"" of type '" "struct loadparm_context *""'"); + } + arg2 = (struct loadparm_context *)(argp2); + } + { + if (arg1 == NULL) + SWIG_exception(SWIG_ValueError, + "ldb context must be non-NULL"); + } + ldb_set_loadparm(arg1,arg2); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + static PyMethodDef SwigMethods[] = { { (char *)"random_password", (PyCFunction) _wrap_random_password, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"ldb_set_credentials", (PyCFunction) _wrap_ldb_set_credentials, METH_VARARGS | METH_KEYWORDS, NULL}, + { (char *)"ldb_set_loadparm", (PyCFunction) _wrap_ldb_set_loadparm, METH_VARARGS | METH_KEYWORDS, NULL}, { NULL, NULL, 0, NULL } }; Modified: branches/SAMBA_4_0/source/scripting/python/samba/__init__.py =================================================================== --- branches/SAMBA_4_0/source/scripting/python/samba/__init__.py 2007-12-16 16:19:43 UTC (rev 26476) +++ branches/SAMBA_4_0/source/scripting/python/samba/__init__.py 2007-12-16 17:17:37 UTC (rev 26477) @@ -21,21 +21,33 @@ import os def _in_source_tree(): + """Check whether the script is being run from the source dir. """ return os.path.exists("%s/../../../samba4-skip" % os.path.dirname(__file__)) + # When running, in-tree, make sure bin/python is in the PYTHONPATH if _in_source_tree(): import sys - dir = os.path.dirname(__file__) - sys.path.append("%s/../../../bin/python" % os.path.dirname(__file__)) + srcdir = "%s/../../.." % os.path.dirname(__file__) + sys.path.append("%s/bin/python" % srcdir) + default_ldb_modules_dir = "%s/bin/modules/ldb" % srcdir + import misc import ldb ldb.ldb.set_credentials = misc.ldb_set_credentials +#FIXME: ldb.ldb.set_session_info = misc.ldb_set_session_info +ldb.ldb.set_loadparm = misc.ldb_set_loadparm -def Ldb(url, session_info=None, credentials=None, modules_dir=None): +def Ldb(url, session_info=None, credentials=None, modules_dir=None, lp=None): """Open a Samba Ldb file. + :param url: LDB Url to open + :param session_info: Optional session information + :param credentials: Optional credentials, defaults to anonymous. + :param modules_dir: Modules directory, automatically set if not specified. + :param lp: Loadparm object, optional. + This is different from a regular Ldb file in that the Samba-specific modules-dir is used by default and that credentials and session_info can be passed through (required by some modules). @@ -43,12 +55,17 @@ import ldb ret = ldb.Ldb() if modules_dir is None: - modules_dir = os.path.join(os.getcwd(), "bin", "modules", "ldb") - ret.set_modules_dir(modules_dir) + modules_dir = default_ldb_modules_dir + if modules_dir is not None: + ret.set_modules_dir(modules_dir) def samba_debug(level,text): print "%d %s" % (level, text) - ldb_set_opaque("credentials", credentials) - ret.set_opaque("sessionInfo", session_info) + if credentials is not None: + ldb.set_credentials(credentials) + if session_info is not None: + ldb.set_session_info(session_info) + if lp is not None: + ldb.set_loadparm(lp) #ret.set_debug(samba_debug) ret.connect(url) return ret
