From 434e625e45a03889596999eb4301bb54128c31a9 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 14 Apr 2008 11:48:43 +0200 Subject: Add in a way to get at the private_path() function from python Andrew Bartlett (This used to be commit 416d2e3a5233f0c243e45857cfda5126c34ac265) --- source4/scripting/python/misc.i | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source4') diff --git a/source4/scripting/python/misc.i b/source4/scripting/python/misc.i index e04e6a6906..6fa3bc93e3 100644 --- a/source4/scripting/python/misc.i +++ b/source4/scripting/python/misc.i @@ -78,3 +78,8 @@ bool dsdb_set_ntds_invocation_id(struct ldb_context *ldb, const char *guid) return samdb_set_ntds_invocation_id(ldb, &invocation_id_in); } %} + +char *private_path(TALLOC_CTX* mem_ctx, + struct loadparm_context *lp_ctx, + const char *name); + -- cgit From 5a37b3fc5d42beffaf4bdca70b1f0c5f80f92280 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 14 Apr 2008 11:51:02 +0200 Subject: Fix newuser and setpassword scripts, and port to idmap. The new idmap world does not use the unixUser any more, so we need to set up the entry (if wanted) in the idmap database. Users without a backing unix user will get an allocated uid by idmap later. Andrew Bartlett (This used to be commit 8bd8bc1475ddf22d4702dcd17028a9043a5e629f) --- source4/scripting/python/samba/idmap.py | 7 +++++++ source4/scripting/python/samba/samdb.py | 28 +++++++++++++++++++++++++++- source4/setup/newuser | 10 ++-------- source4/setup/setpassword | 8 ++++---- source4/setup/tests/blackbox_provision.sh | 7 +++++-- 5 files changed, 45 insertions(+), 15 deletions(-) (limited to 'source4') diff --git a/source4/scripting/python/samba/idmap.py b/source4/scripting/python/samba/idmap.py index 355565968a..16efcd0470 100644 --- a/source4/scripting/python/samba/idmap.py +++ b/source4/scripting/python/samba/idmap.py @@ -21,6 +21,7 @@ """Convenience functions for using the idmap database.""" import samba +import misc import ldb class IDmapDB(samba.Ldb): @@ -37,11 +38,17 @@ class IDmapDB(samba.Ldb): :param url: URL of the database. """ + self.lp = lp + super(IDmapDB, self).__init__(session_info=session_info, credentials=credentials, modules_dir=modules_dir, lp=lp) if url: self.connect(url) + else: + self.connect(lp.get("idmap database")) + def connect(self, url): + super(IDmapDB, self).connect(misc.private_path(self.lp, url)) def setup_name_mapping(self, sid, type, unixid): """Setup a mapping between a sam name and a unix name. diff --git a/source4/scripting/python/samba/samdb.py b/source4/scripting/python/samba/samdb.py index bc3eef7879..198d1e9f5c 100644 --- a/source4/scripting/python/samba/samdb.py +++ b/source4/scripting/python/samba/samdb.py @@ -25,20 +25,29 @@ import samba import misc import ldb +from samba.idmap import IDmapDB +import pwd class SamDB(samba.Ldb): """The SAM database.""" + def __init__(self, url=None, session_info=None, credentials=None, modules_dir=None, lp=None): """Open the Sam Database. :param url: URL of the database. """ + self.lp = lp super(SamDB, self).__init__(session_info=session_info, credentials=credentials, modules_dir=modules_dir, lp=lp) assert misc.dsdb_set_global_schema(self) == 0 if url: self.connect(url) + else: + self.connect(lp.get("sam database")) + + def connect(self, url): + super(SamDB, self).connect(misc.private_path(self.lp, url)) def add_foreign(self, domaindn, sid, desc): """Add a foreign security principle.""" @@ -101,10 +110,27 @@ userAccountControl: %u # now the real work self.add({"dn": user_dn, "sAMAccountName": username, - "unixName": unixname, "sambaPassword": password, "objectClass": "user"}) + res = self.search(user_dn, scope=ldb.SCOPE_BASE, + expression="objectclass=*", + attrs=["objectSid"]) + assert(len(res) == 1) + user_sid = self.schema_format_value("objectSid", res[0]["objectSid"][0]) + + + try: + idmap = IDmapDB(lp=self.lp) + + user = pwd.getpwnam(unixname) + # setup ID mapping for this UID + + idmap.setup_name_mapping(user_sid, idmap.TYPE_UID, user[2]) + + except KeyError: + pass + # modify the userAccountControl to remove the disabled bit self.enable_account(user_dn) self.transaction_commit() diff --git a/source4/setup/newuser b/source4/setup/newuser index f622058a5d..04a5440ee1 100755 --- a/source4/setup/newuser +++ b/source4/setup/newuser @@ -45,15 +45,9 @@ else: if opts.unixname is None: opts.unixname = username -try: - pwd.getpwnam(opts.unixname) -except KeyError: - print "ERROR: Unix user '%s' does not exist" % opts.unixname - sys.exit(1) - -creds = credopts.get_credentials() - lp = sambaopts.get_loadparm() +creds = credopts.get_credentials(lp) + samdb = SamDB(url=lp.get("sam database"), session_info=system_session(), credentials=creds, lp=lp) samdb.newuser(username, opts.unixname, password) diff --git a/source4/setup/setpassword b/source4/setup/setpassword index 31b2f73a25..977a6a5ee8 100644 --- a/source4/setup/setpassword +++ b/source4/setup/setpassword @@ -36,7 +36,7 @@ if len(args) == 0: parser.print_usage() sys.exit(1) -password = opts.password; +password = opts.newpassword; if password is None: password = getpass("New Password: ") @@ -47,12 +47,12 @@ if filter is None: if username is None: print "Either username or --filter must be specified" - filter = "(&(objectclass=user)(samAccountName=" + username + "))" + filter = "(&(objectclass=user)(samAccountName=%s))" % (username) -creds = credopts.get_credentials() - lp = sambaopts.get_loadparm() +creds = credopts.get_credentials(lp) + samdb = SamDB(url=lp.get("sam database"), session_info=system_session(), credentials=creds, lp=lp) samdb.setpassword(filter, password) diff --git a/source4/setup/tests/blackbox_provision.sh b/source4/setup/tests/blackbox_provision.sh index 4db226778c..19f37cef2d 100755 --- a/source4/setup/tests/blackbox_provision.sh +++ b/source4/setup/tests/blackbox_provision.sh @@ -31,8 +31,11 @@ testit "simple-default" $PYTHON ./setup/provision $CONFIGURATION --domain=FOO -- testit "simple-dc" $PYTHON ./setup/provision $CONFIGURATION --server-role="dc" --domain=FOO --realm=foo.example.com --domain-sid=S-1-5-21-4177067393-1453636373-93818738 --targetdir=$PREFIX/simple-dc testit "simple-member" $PYTHON ./setup/provision $CONFIGURATION --server-role="member" --domain=FOO --realm=foo.example.com --targetdir=$PREFIX/simple-member testit "simple-standalone" $PYTHON ./setup/provision $CONFIGURATION --server-role="standalone" --domain=FOO --realm=foo.example.com --targetdir=$PREFIX/simple-standalone -testit "blank-dc" $PYTHON ./setup/provision $CONFIGURATION --server-role="dc" --domain=FOO --realm=foo.example.com --domain-sid=S-1-5-21-4177067393-1453636373-93818738 --targetdir=$PREFIX/simple-dc --blank -testit "partitions-only-dc" $PYTHON ./setup/provision $CONFIGURATION --server-role="dc" --domain=FOO --realm=foo.example.com --domain-sid=S-1-5-21-4177067393-1453636373-93818738 --targetdir=$PREFIX/simple-dc --partitions-only +testit "blank-dc" $PYTHON ./setup/provision $CONFIGURATION --server-role="dc" --domain=FOO --realm=foo.example.com --domain-sid=S-1-5-21-4177067393-1453636373-93818738 --targetdir=$PREFIX/blank-dc --blank +testit "partitions-only-dc" $PYTHON ./setup/provision $CONFIGURATION --server-role="dc" --domain=FOO --realm=foo.example.com --domain-sid=S-1-5-21-4177067393-1453636373-93818738 --targetdir=$PREFIX/partitions-only-dc --partitions-only + +testit "newuser" $PYTHON ./setup/newuser --configfile=$PREFIX/simple-dc/etc/smb.conf testuser testpass +testit "setpassword" $PYTHON ./setup/setpassword --configfile=$PREFIX/simple-dc/etc/smb.conf testuser --newpassword=testpass reprovision() { $PYTHON ./setup/provision $CONFIGURATION --domain=FOO --realm=foo.example.com --targetdir="$PREFIX/reprovision" -- cgit From ca78fa8cae96099055a6ae7a0963c2b2789f2b87 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 14 Apr 2008 11:53:28 +0200 Subject: Re-run SWIG (This used to be commit 2f8010582607ad7389cac3de4945ea0ee46941b3) --- source4/scripting/python/misc.py | 1 + source4/scripting/python/misc_wrap.c | 45 ++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) (limited to 'source4') diff --git a/source4/scripting/python/misc.py b/source4/scripting/python/misc.py index 2fc7fe37e7..f1da4c687a 100644 --- a/source4/scripting/python/misc.py +++ b/source4/scripting/python/misc.py @@ -71,5 +71,6 @@ version = _misc.version dsdb_set_global_schema = _misc.dsdb_set_global_schema ldb_register_samba_handlers = _misc.ldb_register_samba_handlers dsdb_set_ntds_invocation_id = _misc.dsdb_set_ntds_invocation_id +private_path = _misc.private_path diff --git a/source4/scripting/python/misc_wrap.c b/source4/scripting/python/misc_wrap.c index 579d1f379f..4944515d15 100644 --- a/source4/scripting/python/misc_wrap.c +++ b/source4/scripting/python/misc_wrap.c @@ -3153,6 +3153,50 @@ fail: } +SWIGINTERN PyObject *_wrap_private_path(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) { + PyObject *resultobj = 0; + TALLOC_CTX *arg1 = (TALLOC_CTX *) 0 ; + struct loadparm_context *arg2 = (struct loadparm_context *) 0 ; + char *arg3 = (char *) 0 ; + char *result = 0 ; + void *argp2 = 0 ; + int res2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + char * kwnames[] = { + (char *) "lp_ctx",(char *) "name", NULL + }; + + arg2 = loadparm_init(NULL); + arg1 = NULL; + if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"|OO:private_path",kwnames,&obj0,&obj1)) SWIG_fail; + if (obj0) { + res2 = SWIG_ConvertPtr(obj0, &argp2,SWIGTYPE_p_loadparm_context, 0 | 0 ); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "private_path" "', argument " "2"" of type '" "struct loadparm_context *""'"); + } + arg2 = (struct loadparm_context *)(argp2); + } + if (obj1) { + res3 = SWIG_AsCharPtrAndSize(obj1, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "private_path" "', argument " "3"" of type '" "char const *""'"); + } + arg3 = (char *)(buf3); + } + result = (char *)private_path(arg1,arg2,(char const *)arg3); + resultobj = SWIG_FromCharPtr((const char *)result); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + 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}, @@ -3164,6 +3208,7 @@ static PyMethodDef SwigMethods[] = { { (char *)"dsdb_set_global_schema", (PyCFunction) _wrap_dsdb_set_global_schema, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"ldb_register_samba_handlers", (PyCFunction) _wrap_ldb_register_samba_handlers, METH_VARARGS | METH_KEYWORDS, NULL}, { (char *)"dsdb_set_ntds_invocation_id", (PyCFunction) _wrap_dsdb_set_ntds_invocation_id, METH_VARARGS | METH_KEYWORDS, NULL}, + { (char *)"private_path", (PyCFunction) _wrap_private_path, METH_VARARGS | METH_KEYWORDS, NULL}, { NULL, NULL, 0, NULL } }; -- cgit From 0fa62eb2751805bb60d4cfc55b539770aa3471a4 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 14 Apr 2008 16:01:15 +0200 Subject: Include the smbconf parameter to the provision Otherwise this fails, if the targetdir is not specified Andrew Bartlett (This used to be commit cd2d3d1c7a0aad7beb167459276c012c7a6d2e88) --- source4/param/provision.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'source4') diff --git a/source4/param/provision.c b/source4/param/provision.c index 70ef618b6e..0e54acf9e4 100644 --- a/source4/param/provision.c +++ b/source4/param/provision.c @@ -76,6 +76,9 @@ NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, settings->targetdir)); parameters = PyDict_New(); + PyDict_SetItemString(parameters, "smbconf", + PyString_FromString(lp_configfile(lp_ctx))); + PyDict_SetItemString(parameters, "rootdn", PyString_FromString(settings->root_dn_str)); if (settings->targetdir != NULL) @@ -129,7 +132,6 @@ NTSTATUS provision_bare(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, result->domaindn = talloc_strdup(mem_ctx, PyString_AsString(PyObject_GetAttrString(py_result, "domaindn"))); /* FIXME paths */ - /* FIXME samdb */ result->lp_ctx = lp_from_py_object(PyObject_GetAttrString(py_result, "lp")); result->samdb = ldb_context_from_py_object(PyObject_GetAttrString(py_result, "samdb")); -- cgit From 76a7ea3dc438d7259fb569410b0faff112e54d4a Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 14 Apr 2008 16:41:46 +0200 Subject: Makefile: fix variable name automatic_deps -> automatic_dependencies metze (This used to be commit 7ffc44b7c126dc08d928e63af30111b2c556146f) --- source4/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4') diff --git a/source4/Makefile b/source4/Makefile index 8c74b4899d..98c45a34ad 100644 --- a/source4/Makefile +++ b/source4/Makefile @@ -24,7 +24,7 @@ $(srcdir)/version.h: $(srcdir)/VERSION .DEFAULT_GOAL := all -ifneq ($(automatic_deps),yes) +ifneq ($(automatic_dependencies),yes) ALL_PREDEP = proto .NOTPARALLEL: endif -- cgit From 97e09c2f877779ca6d55684d33b1a24b8a280e51 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 14 Apr 2008 16:45:38 +0200 Subject: lib/events: fix missing prototype of s4_events_aio_init() metze (This used to be commit 8dca5b9bbb8706a98ad9a15f1b479be497dd44e7) --- source4/lib/events/events.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4') diff --git a/source4/lib/events/events.c b/source4/lib/events/events.c index 5d43a91161..568aadc31e 100644 --- a/source4/lib/events/events.c +++ b/source4/lib/events/events.c @@ -105,6 +105,7 @@ static void event_backend_init(void) NTSTATUS s4_events_standard_init(void); NTSTATUS s4_events_select_init(void); NTSTATUS s4_events_epoll_init(void); + NTSTATUS s4_events_aio_init(void); init_module_fn static_init[] = { STATIC_LIBEVENTS_MODULES }; if (event_backends) return; run_init_functions(static_init); -- cgit From b54e6a815514ef1e5a0a5d11ca43f85e0366b8dc Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 14 Apr 2008 17:58:09 +0200 Subject: Ensure we initialise s->lp_ctx for the way into the provision. Andrew Bartlett (This used to be commit b191a1953c24545e9dc1869fc33cb29343d4e3f2) --- source4/libnet/libnet_vampire.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source4') diff --git a/source4/libnet/libnet_vampire.c b/source4/libnet/libnet_vampire.c index 9d32088fe6..1cc63a3fb0 100644 --- a/source4/libnet/libnet_vampire.c +++ b/source4/libnet/libnet_vampire.c @@ -586,6 +586,8 @@ NTSTATUS libnet_Vampire(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, return NT_STATUS_NO_MEMORY; } + s->lp_ctx = ctx->lp_ctx; + join = talloc_zero(s, struct libnet_JoinDomain); if (!join) { return NT_STATUS_NO_MEMORY; -- cgit From 02f3695897dddb013fc1268a4f1a852cd4a3465e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 14 Apr 2008 18:30:07 +0200 Subject: Add convenience TestCase class for testing RPC interfaces. (This used to be commit 2f19f981449bf6f4d29f231259817c8b66104a9b) --- source4/scripting/python/samba/tests/__init__.py | 7 +++++++ source4/scripting/python/samba/tests/dcerpc/registry.py | 9 ++++----- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'source4') diff --git a/source4/scripting/python/samba/tests/__init__.py b/source4/scripting/python/samba/tests/__init__.py index c8673d3fae..ceb7dd23f3 100644 --- a/source4/scripting/python/samba/tests/__init__.py +++ b/source4/scripting/python/samba/tests/__init__.py @@ -90,3 +90,10 @@ def get_loadparm(): lp = param.LoadParm() lp.load(os.getenv("SMB_CONF_PATH")) return lp + +class RpcInterfaceTestCase(unittest.TestCase): + def get_loadparm(self): + return get_loadparm() + + def get_credentials(self): + return None diff --git a/source4/scripting/python/samba/tests/dcerpc/registry.py b/source4/scripting/python/samba/tests/dcerpc/registry.py index 147acc5098..1afdc582a7 100644 --- a/source4/scripting/python/samba/tests/dcerpc/registry.py +++ b/source4/scripting/python/samba/tests/dcerpc/registry.py @@ -18,14 +18,13 @@ # import winreg -from param import LoadParm import unittest -from samba.tests import get_loadparm +from samba.tests import RpcInterfaceTestCase -class WinregTests(unittest.TestCase): +class WinregTests(RpcInterfaceTestCase): def setUp(self): - lp_ctx = get_loadparm() - self.conn = winreg.winreg("ncalrpc:", lp_ctx) + self.conn = winreg.winreg("ncalrpc:", self.get_loadparm(), + self.get_credentials()) def get_hklm(self): return self.conn.OpenHKLM(None, -- cgit From 4f51b0246db3242ee02ee16905cba13a5dc5633a Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 14 Apr 2008 12:43:37 -0400 Subject: Fix problems with event context not being the parent. (This used to be commit 957c4d893acf9e6db06a3fc3a4687ab6bb238635) --- source4/libnet/libnet.c | 13 +++++-------- source4/libnet/py_net.c | 13 +++++++++---- source4/torture/libnet/libnet_domain.c | 11 +++++------ source4/torture/libnet/libnet_group.c | 6 +++--- source4/torture/libnet/libnet_lookup.c | 8 ++++---- source4/torture/libnet/libnet_rpc.c | 2 +- source4/torture/libnet/libnet_share.c | 4 ++-- source4/torture/libnet/libnet_user.c | 10 +++++----- source4/torture/rpc/dfs.c | 4 ++-- source4/torture/rpc/testjoin.c | 4 ++-- source4/torture/smbtorture.c | 4 +++- source4/torture/ui.c | 6 +++--- source4/torture/ui.h | 2 +- source4/torture/util_smb.c | 3 +-- source4/utils/net/net.c | 18 ++++++++++++------ source4/utils/net/net.h | 1 - source4/utils/net/net_join.c | 11 ++++++----- source4/utils/net/net_password.c | 19 ++++++++++--------- source4/utils/net/net_time.c | 5 +++-- source4/utils/net/net_user.c | 13 +++++++------ source4/utils/net/net_vampire.c | 11 ++++++----- 21 files changed, 90 insertions(+), 78 deletions(-) (limited to 'source4') diff --git a/source4/libnet/libnet.c b/source4/libnet/libnet.c index d1605bc17d..c966898cee 100644 --- a/source4/libnet/libnet.c +++ b/source4/libnet/libnet.c @@ -28,20 +28,17 @@ struct libnet_context *libnet_context_init(struct event_context *ev, { struct libnet_context *ctx; + /* We require an event context here */ + if (!ev) { + return NULL; + } + /* create brand new libnet context */ ctx = talloc(ev, struct libnet_context); if (!ctx) { return NULL; } - /* events */ - if (ev == NULL) { - ev = event_context_find(ctx); - if (ev == NULL) { - talloc_free(ctx); - return NULL; - } - } ctx->event_ctx = ev; ctx->lp_ctx = lp_ctx; diff --git a/source4/libnet/py_net.c b/source4/libnet/py_net.c index 2fcbc5d156..cf81d8070d 100644 --- a/source4/libnet/py_net.c +++ b/source4/libnet/py_net.c @@ -22,11 +22,12 @@ #include "libnet.h" #include "param/param.h" #include "libcli/security/security.h" +#include "lib/events/events.h" -struct libnet_context *py_net_ctx(PyObject *obj) +struct libnet_context *py_net_ctx(PyObject *obj, struct event_context *ev) { /* FIXME: Use obj */ - return libnet_context_init(NULL, global_loadparm); + return libnet_context_init(ev, global_loadparm); } static PyObject *py_net_join(PyObject *cls, PyObject *args, PyObject *kwargs) @@ -35,6 +36,7 @@ static PyObject *py_net_join(PyObject *cls, PyObject *args, PyObject *kwargs) NTSTATUS status; PyObject *result; TALLOC_CTX *mem_ctx; + struct event_context *ev; struct libnet_context *libnet_ctx; const char *kwnames[] = { "domain_name", "netbios_name", "join_type", "level", NULL }; @@ -43,9 +45,12 @@ static PyObject *py_net_join(PyObject *cls, PyObject *args, PyObject *kwargs) &r.in.join_type, &r.in.level)) return NULL; - mem_ctx = talloc_new(NULL); + /* FIXME: we really need to get a context from the caller or we may end + * up with 2 event contexts */ + ev = event_context_init(NULL); + mem_ctx = talloc_new(ev); - libnet_ctx = py_net_ctx(cls); + libnet_ctx = py_net_ctx(cls, ev); status = libnet_Join(libnet_ctx, mem_ctx, &r); if (NT_STATUS_IS_ERR(status)) { diff --git a/source4/torture/libnet/libnet_domain.c b/source4/torture/libnet/libnet_domain.c index 3c8d574f0e..eb6abc45d5 100644 --- a/source4/torture/libnet/libnet_domain.c +++ b/source4/torture/libnet/libnet_domain.c @@ -136,7 +136,7 @@ bool torture_domain_open_lsa(struct torture_context *torture) of specific server name. */ domain_name = lp_workgroup(torture->lp_ctx); - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); if (ctx == NULL) { d_printf("failed to create libnet context\n"); return false; @@ -190,7 +190,7 @@ bool torture_domain_close_lsa(struct torture_context *torture) return false; } - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); if (ctx == NULL) { d_printf("failed to create libnet context\n"); ret = false; @@ -245,7 +245,6 @@ bool torture_domain_open_samr(struct torture_context *torture) { NTSTATUS status; struct libnet_context *ctx; - struct event_context *evt_ctx=NULL; TALLOC_CTX *mem_ctx; struct policy_handle domain_handle, handle; struct libnet_DomainOpen io; @@ -255,7 +254,7 @@ bool torture_domain_open_samr(struct torture_context *torture) mem_ctx = talloc_init("test_domainopen_lsa"); - ctx = libnet_context_init(evt_ctx, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; /* we're accessing domain controller so the domain name should be @@ -320,7 +319,7 @@ bool torture_domain_close_samr(struct torture_context *torture) return false; } - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); if (ctx == NULL) { d_printf("failed to create libnet context\n"); ret = false; @@ -388,7 +387,7 @@ bool torture_domain_list(struct torture_context *torture) return false; } - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); if (ctx == NULL) { d_printf("failed to create libnet context\n"); ret = false; diff --git a/source4/torture/libnet/libnet_group.c b/source4/torture/libnet/libnet_group.c index cabccdbe66..12b8167a86 100644 --- a/source4/torture/libnet/libnet_group.c +++ b/source4/torture/libnet/libnet_group.c @@ -235,7 +235,7 @@ bool torture_groupinfo_api(struct torture_context *torture) prep_mem_ctx = talloc_init("prepare torture group info"); - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; status = torture_rpc_connection(torture, @@ -300,7 +300,7 @@ bool torture_grouplist(struct torture_context *torture) struct libnet_GroupList req; int i; - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; domain_name.string = lp_workgroup(torture->lp_ctx); @@ -361,7 +361,7 @@ bool torture_creategroup(struct torture_context *torture) mem_ctx = talloc_init("test_creategroup"); - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; req.in.group_name = TEST_GROUPNAME; diff --git a/source4/torture/libnet/libnet_lookup.c b/source4/torture/libnet/libnet_lookup.c index 9167d1de3e..b25b51b7d9 100644 --- a/source4/torture/libnet/libnet_lookup.c +++ b/source4/torture/libnet/libnet_lookup.c @@ -40,7 +40,7 @@ bool torture_lookup(struct torture_context *torture) mem_ctx = talloc_init("test_lookup"); - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; lookup.in.hostname = torture_setting_string(torture, "host", NULL); @@ -84,7 +84,7 @@ bool torture_lookup_host(struct torture_context *torture) mem_ctx = talloc_init("test_lookup_host"); - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; lookup.in.hostname = torture_setting_string(torture, "host", NULL); @@ -127,7 +127,7 @@ bool torture_lookup_pdc(struct torture_context *torture) mem_ctx = talloc_init("test_lookup_pdc"); - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; talloc_steal(ctx, mem_ctx); @@ -171,7 +171,7 @@ bool torture_lookup_sam_name(struct torture_context *torture) struct libnet_context *ctx; struct libnet_LookupName r; - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; mem_ctx = talloc_init("torture lookup sam name"); diff --git a/source4/torture/libnet/libnet_rpc.c b/source4/torture/libnet/libnet_rpc.c index 282837d3fe..f25c1ecc48 100644 --- a/source4/torture/libnet/libnet_rpc.c +++ b/source4/torture/libnet/libnet_rpc.c @@ -89,7 +89,7 @@ static bool torture_rpc_connect(struct torture_context *torture, { struct libnet_context *ctx; - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; d_printf("Testing connection to LSA interface\n"); diff --git a/source4/torture/libnet/libnet_share.c b/source4/torture/libnet/libnet_share.c index eb1edff18d..6bc5be40a6 100644 --- a/source4/torture/libnet/libnet_share.c +++ b/source4/torture/libnet/libnet_share.c @@ -131,7 +131,7 @@ bool torture_listshares(struct torture_context *torture) goto done; } - libnetctx = libnet_context_init(NULL, torture->lp_ctx); + libnetctx = libnet_context_init(torture->ev, torture->lp_ctx); if (!libnetctx) { printf("Couldn't allocate libnet context\n"); ret = false; @@ -210,7 +210,7 @@ bool torture_delshare(struct torture_context *torture) status = torture_rpc_binding(torture, &binding); torture_assert_ntstatus_ok(torture, status, "Failed to get binding"); - libnetctx = libnet_context_init(NULL, torture->lp_ctx); + libnetctx = libnet_context_init(torture->ev, torture->lp_ctx); libnetctx->cred = cmdline_credentials; status = torture_rpc_connection(torture, diff --git a/source4/torture/libnet/libnet_user.c b/source4/torture/libnet/libnet_user.c index 5446087034..15e3f03506 100644 --- a/source4/torture/libnet/libnet_user.c +++ b/source4/torture/libnet/libnet_user.c @@ -241,7 +241,7 @@ bool torture_createuser(struct torture_context *torture) mem_ctx = talloc_init("test_createuser"); - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; req.in.user_name = TEST_USERNAME; @@ -287,7 +287,7 @@ bool torture_deleteuser(struct torture_context *torture) prep_mem_ctx = talloc_init("prepare test_deleteuser"); - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; req.in.user_name = TEST_USERNAME; @@ -482,7 +482,7 @@ bool torture_modifyuser(struct torture_context *torture) prep_mem_ctx = talloc_init("prepare test_deleteuser"); - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; status = torture_rpc_connection(torture, @@ -616,7 +616,7 @@ bool torture_userinfo_api(struct torture_context *torture) prep_mem_ctx = talloc_init("prepare torture user info"); - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; status = torture_rpc_connection(torture, @@ -681,7 +681,7 @@ bool torture_userlist(struct torture_context *torture) struct libnet_UserList req; int i; - ctx = libnet_context_init(NULL, torture->lp_ctx); + ctx = libnet_context_init(torture->ev, torture->lp_ctx); ctx->cred = cmdline_credentials; domain_name.string = lp_workgroup(torture->lp_ctx); diff --git a/source4/torture/rpc/dfs.c b/source4/torture/rpc/dfs.c index 9cfdd80578..5656476922 100644 --- a/source4/torture/rpc/dfs.c +++ b/source4/torture/rpc/dfs.c @@ -56,7 +56,7 @@ static bool test_NetShareAdd(TALLOC_CTX *mem_ctx, printf("Creating share %s\n", sharename); - if (!(libnetctx = libnet_context_init(NULL, tctx->lp_ctx))) { + if (!(libnetctx = libnet_context_init(tctx->ev, tctx->lp_ctx))) { return false; } @@ -96,7 +96,7 @@ static bool test_NetShareDel(TALLOC_CTX *mem_ctx, printf("Deleting share %s\n", sharename); - if (!(libnetctx = libnet_context_init(NULL, tctx->lp_ctx))) { + if (!(libnetctx = libnet_context_init(tctx->ev, tctx->lp_ctx))) { return false; } diff --git a/source4/torture/rpc/testjoin.c b/source4/torture/rpc/testjoin.c index 892886c08c..100e7cead2 100644 --- a/source4/torture/rpc/testjoin.c +++ b/source4/torture/rpc/testjoin.c @@ -311,7 +311,7 @@ _PUBLIC_ struct test_join *torture_join_domain(struct torture_context *tctx, struct samr_SetUserInfo s; union samr_UserInfo u; - tj = talloc(NULL, struct test_join); + tj = talloc(tctx, struct test_join); if (!tj) return NULL; libnet_r = talloc(tj, struct libnet_JoinDomain); @@ -320,7 +320,7 @@ _PUBLIC_ struct test_join *torture_join_domain(struct torture_context *tctx, return NULL; } - libnet_ctx = libnet_context_init(NULL, tctx->lp_ctx); + libnet_ctx = libnet_context_init(tctx->ev, tctx->lp_ctx); if (!libnet_ctx) { talloc_free(tj); return NULL; diff --git a/source4/torture/smbtorture.c b/source4/torture/smbtorture.c index 4eeea73003..faae784e4b 100644 --- a/source4/torture/smbtorture.c +++ b/source4/torture/smbtorture.c @@ -36,6 +36,8 @@ #include "librpc/rpc/dcerpc.h" #include "param/param.h" +#include "auth/credentials/credentials.h" + static bool run_matching(struct torture_context *torture, const char *prefix, const char *expr, @@ -673,7 +675,7 @@ int main(int argc,char *argv[]) exit(1); } - torture = torture_context_init(talloc_autofree_context(), ui_ops); + torture = torture_context_init(cli_credentials_get_event_context(cmdline_credentials), ui_ops); if (basedir != NULL) { if (basedir[0] != '/') { fprintf(stderr, "Please specify an absolute path to --basedir\n"); diff --git a/source4/torture/ui.c b/source4/torture/ui.c index a7025aac95..efa584ebea 100644 --- a/source4/torture/ui.c +++ b/source4/torture/ui.c @@ -27,14 +27,14 @@ #include "auth/credentials/credentials.h" #include "lib/cmdline/popt_common.h" -struct torture_context *torture_context_init(TALLOC_CTX *mem_ctx, +struct torture_context *torture_context_init(struct event_context *event_ctx, const struct torture_ui_ops *ui_ops) { - struct torture_context *torture = talloc_zero(mem_ctx, + struct torture_context *torture = talloc_zero(event_ctx, struct torture_context); torture->ui_ops = ui_ops; torture->returncode = true; - torture->ev = cli_credentials_get_event_context(cmdline_credentials); + torture->ev = event_ctx; if (ui_ops->init) ui_ops->init(torture); diff --git a/source4/torture/ui.h b/source4/torture/ui.h index ec4a658d74..15b04c2397 100644 --- a/source4/torture/ui.h +++ b/source4/torture/ui.h @@ -390,7 +390,7 @@ bool torture_suite_init_tcase(struct torture_suite *suite, struct torture_tcase *tcase, const char *name); -struct torture_context *torture_context_init(TALLOC_CTX *mem_ctx, +struct torture_context *torture_context_init(struct event_context *event_ctx, const struct torture_ui_ops *ui_ops); #endif /* __TORTURE_UI_H__ */ diff --git a/source4/torture/util_smb.c b/source4/torture/util_smb.c index 513070500e..c1a20094f3 100644 --- a/source4/torture/util_smb.c +++ b/source4/torture/util_smb.c @@ -553,8 +553,7 @@ _PUBLIC_ bool torture_open_connection_ev(struct smbcli_state **c, _PUBLIC_ bool torture_open_connection(struct smbcli_state **c, struct torture_context *tctx, int conn_index) { - return torture_open_connection_ev(c, conn_index, tctx, - cli_credentials_get_event_context(cmdline_credentials)); + return torture_open_connection_ev(c, conn_index, tctx, tctx->ev); } diff --git a/source4/utils/net/net.c b/source4/utils/net/net.c index c908ea6279..6086a4ce32 100644 --- a/source4/utils/net/net.c +++ b/source4/utils/net/net.c @@ -46,6 +46,8 @@ #include "lib/ldb/include/ldb.h" #include "librpc/rpc/dcerpc.h" #include "param/param.h" +#include "lib/events/events.h" +#include "auth/credentials/credentials.h" /* run a function from a function table. If not found then @@ -140,7 +142,7 @@ static int binary_net(int argc, const char **argv) int rc; int argc_new; const char **argv_new; - TALLOC_CTX *mem_ctx; + struct event_context *ev; struct net_context *ctx = NULL; poptContext pc; struct poptOption long_options[] = { @@ -183,17 +185,21 @@ static int binary_net(int argc, const char **argv) dcerpc_init(); - mem_ctx = talloc_init("net_context"); - ctx = talloc(mem_ctx, struct net_context); + ev = event_context_init(NULL); + if (!ev) { + d_printf("Failed to create an event context\n"); + exit(1); + } + ctx = talloc(ev, struct net_context); if (!ctx) { - d_printf("talloc_init(net_context) failed\n"); + d_printf("Failed to talloc a net_context\n"); exit(1); } ZERO_STRUCTP(ctx); - ctx->mem_ctx = mem_ctx; ctx->lp_ctx = cmdline_lp_ctx; ctx->credentials = cmdline_credentials; + cli_credentials_set_event_context(ctx->credentials, ev); rc = net_run_function(ctx, argc_new-1, argv_new+1, net_functable, net_usage); @@ -201,7 +207,7 @@ static int binary_net(int argc, const char **argv) DEBUG(0,("return code = %d\n", rc)); } - talloc_free(mem_ctx); + talloc_free(ev); return rc; } diff --git a/source4/utils/net/net.h b/source4/utils/net/net.h index 8c4fbd7fdd..17388079dd 100644 --- a/source4/utils/net/net.h +++ b/source4/utils/net/net.h @@ -22,7 +22,6 @@ #define _UTIL_NET_H struct net_context { - TALLOC_CTX *mem_ctx; struct cli_credentials *credentials; struct loadparm_context *lp_ctx; }; diff --git a/source4/utils/net/net_join.c b/source4/utils/net/net_join.c index abdcbf6027..2102257c6c 100644 --- a/source4/utils/net/net_join.c +++ b/source4/utils/net/net_join.c @@ -24,6 +24,7 @@ #include "libnet/libnet.h" #include "libcli/security/security.h" #include "param/param.h" +#include "lib/events/events.h" int net_join(struct net_context *ctx, int argc, const char **argv) { @@ -38,10 +39,10 @@ int net_join(struct net_context *ctx, int argc, const char **argv) case 0: /* no args -> fail */ return net_join_usage(ctx, argc, argv); case 1: /* only DOMAIN */ - tmp = talloc_strdup(ctx->mem_ctx, argv[0]); + tmp = talloc_strdup(ctx, argv[0]); break; case 2: /* DOMAIN and role */ - tmp = talloc_strdup(ctx->mem_ctx, argv[0]); + tmp = talloc_strdup(ctx, argv[0]); if (strcasecmp(argv[1], "BDC") == 0) { secure_channel_type = SEC_CHAN_BDC; } else if (strcasecmp(argv[1], "MEMBER") == 0) { @@ -57,12 +58,12 @@ int net_join(struct net_context *ctx, int argc, const char **argv) domain_name = tmp; - libnetctx = libnet_context_init(NULL, ctx->lp_ctx); + libnetctx = libnet_context_init(event_context_find(ctx), ctx->lp_ctx); if (!libnetctx) { return -1; } libnetctx->cred = ctx->credentials; - r = talloc(ctx->mem_ctx, struct libnet_Join); + r = talloc(ctx, struct libnet_Join); if (!r) { return -1; } @@ -83,7 +84,7 @@ int net_join(struct net_context *ctx, int argc, const char **argv) talloc_free(libnetctx); return -1; } - d_printf("Joined domain %s (%s)\n", r->out.domain_name, dom_sid_string(ctx->mem_ctx, r->out.domain_sid)); + d_printf("Joined domain %s (%s)\n", r->out.domain_name, dom_sid_string(ctx, r->out.domain_sid)); talloc_free(libnetctx); return 0; diff --git a/source4/utils/net/net_password.c b/source4/utils/net/net_password.c index 1fcb772e4c..97bb467fac 100644 --- a/source4/utils/net/net_password.c +++ b/source4/utils/net/net_password.c @@ -22,6 +22,7 @@ #include "utils/net/net.h" #include "libnet/libnet.h" #include "system/filesys.h" +#include "lib/events/events.h" #include "auth/credentials/credentials.h" /* @@ -46,13 +47,13 @@ static int net_password_change(struct net_context *ctx, int argc, const char **a if (argc > 0 && argv[0]) { new_password = argv[0]; } else { - password_prompt = talloc_asprintf(ctx->mem_ctx, "Enter new password for account [%s\\%s]:", + password_prompt = talloc_asprintf(ctx, "Enter new password for account [%s\\%s]:", cli_credentials_get_domain(ctx->credentials), cli_credentials_get_username(ctx->credentials)); new_password = getpass(password_prompt); } - libnetctx = libnet_context_init(NULL, ctx->lp_ctx); + libnetctx = libnet_context_init(event_context_find(ctx), ctx->lp_ctx); if (!libnetctx) { return -1; } @@ -66,7 +67,7 @@ static int net_password_change(struct net_context *ctx, int argc, const char **a r.generic.in.newpassword = new_password; /* do password change */ - status = libnet_ChangePassword(libnetctx, ctx->mem_ctx, &r); + status = libnet_ChangePassword(libnetctx, ctx, &r); if (!NT_STATUS_IS_OK(status)) { DEBUG(0,("net_password_change: %s\n",r.generic.out.error_string)); return -1; @@ -101,10 +102,10 @@ static int net_password_set(struct net_context *ctx, int argc, const char **argv case 0: /* no args -> fail */ return net_password_set_usage(ctx, argc, argv); case 1: /* only DOM\\user; prompt for password */ - tmp = talloc_strdup(ctx->mem_ctx, argv[0]); + tmp = talloc_strdup(ctx, argv[0]); break; case 2: /* DOM\\USER and password */ - tmp = talloc_strdup(ctx->mem_ctx, argv[0]); + tmp = talloc_strdup(ctx, argv[0]); new_password = argv[1]; break; default: /* too mayn args -> fail */ @@ -115,19 +116,19 @@ static int net_password_set(struct net_context *ctx, int argc, const char **argv if ((p = strchr_m(tmp,'\\'))) { *p = 0; domain_name = tmp; - account_name = talloc_strdup(ctx->mem_ctx, p+1); + account_name = talloc_strdup(ctx, p+1); } else { account_name = tmp; domain_name = cli_credentials_get_domain(ctx->credentials); } if (!new_password) { - password_prompt = talloc_asprintf(ctx->mem_ctx, "Enter new password for account [%s\\%s]:", + password_prompt = talloc_asprintf(ctx, "Enter new password for account [%s\\%s]:", domain_name, account_name); new_password = getpass(password_prompt); } - libnetctx = libnet_context_init(NULL, ctx->lp_ctx); + libnetctx = libnet_context_init(event_context_find(ctx), ctx->lp_ctx); if (!libnetctx) { return -1; } @@ -140,7 +141,7 @@ static int net_password_set(struct net_context *ctx, int argc, const char **argv r.generic.in.newpassword = new_password; /* do password change */ - status = libnet_SetPassword(libnetctx, ctx->mem_ctx, &r); + status = libnet_SetPassword(libnetctx, ctx, &r); if (!NT_STATUS_IS_OK(status)) { DEBUG(0,("net_password_set: %s\n",r.generic.out.error_string)); return -1; diff --git a/source4/utils/net/net_time.c b/source4/utils/net/net_time.c index 1f4bb3ed71..12a8132cea 100644 --- a/source4/utils/net/net_time.c +++ b/source4/utils/net/net_time.c @@ -22,6 +22,7 @@ #include "libnet/libnet.h" #include "utils/net/net.h" #include "system/time.h" +#include "lib/events/events.h" /* * Code for getting the remote time @@ -42,7 +43,7 @@ int net_time(struct net_context *ctx, int argc, const char **argv) return net_time_usage(ctx, argc, argv); } - libnetctx = libnet_context_init(NULL, ctx->lp_ctx); + libnetctx = libnet_context_init(event_context_find(ctx), ctx->lp_ctx); if (!libnetctx) { return -1; } @@ -53,7 +54,7 @@ int net_time(struct net_context *ctx, int argc, const char **argv) r.generic.in.server_name = server_name; /* get the time */ - status = libnet_RemoteTOD(libnetctx, ctx->mem_ctx, &r); + status = libnet_RemoteTOD(libnetctx, ctx, &r); if (!NT_STATUS_IS_OK(status)) { DEBUG(0,("net_time: %s\n",r.generic.out.error_string)); return -1; diff --git a/source4/utils/net/net_user.c b/source4/utils/net/net_user.c index 39d50e7d8b..57cef6b383 100644 --- a/source4/utils/net/net_user.c +++ b/source4/utils/net/net_user.c @@ -21,6 +21,7 @@ #include "includes.h" #include "utils/net/net.h" #include "libnet/libnet.h" +#include "lib/events/events.h" #include "auth/credentials/credentials.h" static int net_user_add(struct net_context *ctx, int argc, const char **argv) @@ -36,14 +37,14 @@ static int net_user_add(struct net_context *ctx, int argc, const char **argv) return net_user_usage(ctx, argc, argv); break; case 1: - user_name = talloc_strdup(ctx->mem_ctx, argv[0]); + user_name = talloc_strdup(ctx, argv[0]); break; default: return net_user_usage(ctx, argc, argv); } /* libnet context init and its params */ - lnet_ctx = libnet_context_init(NULL, ctx->lp_ctx); + lnet_ctx = libnet_context_init(event_context_find(ctx), ctx->lp_ctx); if (!lnet_ctx) return -1; lnet_ctx->cred = ctx->credentials; @@ -52,7 +53,7 @@ static int net_user_add(struct net_context *ctx, int argc, const char **argv) r.in.user_name = user_name; r.in.domain_name = cli_credentials_get_domain(lnet_ctx->cred); - status = libnet_CreateUser(lnet_ctx, ctx->mem_ctx, &r); + status = libnet_CreateUser(lnet_ctx, ctx, &r); if (!NT_STATUS_IS_OK(status)) { DEBUG(0, ("Failed to add user account: %s\n", r.out.error_string)); @@ -76,14 +77,14 @@ static int net_user_delete(struct net_context *ctx, int argc, const char **argv) return net_user_usage(ctx, argc, argv); break; case 1: - user_name = talloc_strdup(ctx->mem_ctx, argv[0]); + user_name = talloc_strdup(ctx, argv[0]); break; default: return net_user_usage(ctx, argc, argv); } /* libnet context init and its params */ - lnet_ctx = libnet_context_init(NULL, ctx->lp_ctx); + lnet_ctx = libnet_context_init(event_context_find(ctx), ctx->lp_ctx); if (!lnet_ctx) return -1; lnet_ctx->cred = ctx->credentials; @@ -92,7 +93,7 @@ static int net_user_delete(struct net_context *ctx, int argc, const char **argv) r.in.user_name = user_name; r.in.domain_name = cli_credentials_get_domain(lnet_ctx->cred); - status = libnet_DeleteUser(lnet_ctx, ctx->mem_ctx, &r); + status = libnet_DeleteUser(lnet_ctx, ctx, &r); if (!NT_STATUS_IS_OK(status)) { DEBUG(0, ("Failed to delete user account: %s\n", r.out.error_string)); diff --git a/source4/utils/net/net_vampire.c b/source4/utils/net/net_vampire.c index 4f6371d617..38f05353ed 100644 --- a/source4/utils/net/net_vampire.c +++ b/source4/utils/net/net_vampire.c @@ -25,6 +25,7 @@ #include "librpc/gen_ndr/samr.h" #include "auth/auth.h" #include "param/param.h" +#include "lib/events/events.h" static int net_samdump_keytab_usage(struct net_context *ctx, int argc, const char **argv) { @@ -53,7 +54,7 @@ static int net_samdump_keytab(struct net_context *ctx, int argc, const char **ar break; } - libnetctx = libnet_context_init(NULL, ctx->lp_ctx); + libnetctx = libnet_context_init(event_context_find(ctx), ctx->lp_ctx); if (!libnetctx) { return -1; } @@ -63,7 +64,7 @@ static int net_samdump_keytab(struct net_context *ctx, int argc, const char **ar r.in.machine_account = NULL; r.in.binding_string = NULL; - status = libnet_SamDump_keytab(libnetctx, ctx->mem_ctx, &r); + status = libnet_SamDump_keytab(libnetctx, ctx, &r); if (!NT_STATUS_IS_OK(status)) { DEBUG(0,("libnet_SamDump returned %s: %s\n", nt_errstr(status), @@ -99,7 +100,7 @@ int net_samdump(struct net_context *ctx, int argc, const char **argv) return rc; } - libnetctx = libnet_context_init(NULL, ctx->lp_ctx); + libnetctx = libnet_context_init(event_context_find(ctx), ctx->lp_ctx); if (!libnetctx) { return -1; } @@ -109,7 +110,7 @@ int net_samdump(struct net_context *ctx, int argc, const char **argv) r.in.machine_account = NULL; r.in.binding_string = NULL; - status = libnet_SamDump(libnetctx, ctx->mem_ctx, &r); + status = libnet_SamDump(libnetctx, ctx, &r); if (!NT_STATUS_IS_OK(status)) { DEBUG(0,("libnet_SamDump returned %s: %s\n", nt_errstr(status), @@ -141,7 +142,7 @@ int net_samsync_ldb(struct net_context *ctx, int argc, const char **argv) struct libnet_context *libnetctx; struct libnet_samsync_ldb r; - libnetctx = libnet_context_init(NULL, ctx->lp_ctx); + libnetctx = libnet_context_init(event_context_find(ctx), ctx->lp_ctx); if (!libnetctx) { return -1; } -- cgit From c1d9167fbcc5df9da4f603084ad732915c68c0c0 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 14 Apr 2008 19:01:32 +0200 Subject: Also look in the environment for smb.conf path. (This used to be commit 8be7d93735a357a3b73a1c4413d6fd9ec09b7555) --- source4/scripting/python/samba/getopt.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'source4') diff --git a/source4/scripting/python/samba/getopt.py b/source4/scripting/python/samba/getopt.py index 82cb004b62..7ec684a9d6 100644 --- a/source4/scripting/python/samba/getopt.py +++ b/source4/scripting/python/samba/getopt.py @@ -35,12 +35,14 @@ class SambaOptions(optparse.OptionGroup): self._configfile = arg def get_loadparm(self): - import param + import os, param lp = param.LoadParm() - if self._configfile is None: - lp.load_default() - else: + if self._configfile is not None: lp.load(self._configfile) + elif os.getenv("SMB_CONF_PATH") is not None: + lp.load(os.getenv("SMB_CONF_PATH")) + else: + lp.load_default() return lp class VersionOptions(optparse.OptionGroup): -- cgit From 1bcbc4afcf2f9984081652c1fbe50d329c86b3b5 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 14 Apr 2008 19:13:41 +0200 Subject: Allow command line options in the subunitrun script. (This used to be commit 524ec0796efebd48e7b5b2eb5fcc92ecc13c0071) --- source4/scripting/bin/subunitrun | 22 +++++++++++++++++++++- source4/scripting/python/samba/tests/__init__.py | 12 +++++------- 2 files changed, 26 insertions(+), 8 deletions(-) (limited to 'source4') diff --git a/source4/scripting/bin/subunitrun b/source4/scripting/bin/subunitrun index 11ac426589..3730a15e1b 100755 --- a/source4/scripting/bin/subunitrun +++ b/source4/scripting/bin/subunitrun @@ -20,6 +20,26 @@ from subunit import SubunitTestRunner import sys from unittest import TestProgram +import optparse +import os +import param +import samba.getopt as options +import samba.tests + +parser = optparse.OptionParser("subunitrun [options] ") +credopts = options.CredentialsOptions(parser) +parser.add_option_group(credopts) +sambaopts = options.SambaOptions(parser) +parser.add_option_group(sambaopts) +parser.add_option_group(options.VersionOptions(parser)) + +args = parser.parse_args()[1] + +samba.tests.cmdline_loadparm = sambaopts.get_loadparm() +samba.tests.cmdline_credentials = credopts.get_credentials(samba.tests.cmdline_loadparm) + +import pdb +pdb.set_trace() runner = SubunitTestRunner() -TestProgram(module=None, argv=sys.argv, testRunner=runner) +program = TestProgram(module=None, argv=[sys.argv[0]] + args, testRunner=runner) diff --git a/source4/scripting/python/samba/tests/__init__.py b/source4/scripting/python/samba/tests/__init__.py index ceb7dd23f3..e29b4a87d5 100644 --- a/source4/scripting/python/samba/tests/__init__.py +++ b/source4/scripting/python/samba/tests/__init__.py @@ -85,15 +85,13 @@ class LdbExtensionTests(TestCaseInTempDir): os.unlink(path) -def get_loadparm(): - import param - lp = param.LoadParm() - lp.load(os.getenv("SMB_CONF_PATH")) - return lp +cmdline_loadparm = None +cmdline_credentials = None class RpcInterfaceTestCase(unittest.TestCase): def get_loadparm(self): - return get_loadparm() + assert cmdline_loadparm is not None + return cmdline_loadparm def get_credentials(self): - return None + return cmdline_credentials -- cgit From 2cdfaedee203a726bddfb46fb10d9604de32a05f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 14 Apr 2008 19:20:43 +0200 Subject: Make sure credentials are specified when running the Python winreg RPC tests. (This used to be commit 280339e3d126f5c72dc271051b72839fde0c5c9f) --- source4/scripting/bin/subunitrun | 3 +-- source4/scripting/python/samba/tests/dcerpc/registry.py | 4 ++-- source4/selftest/samba4_tests.sh | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) (limited to 'source4') diff --git a/source4/scripting/bin/subunitrun b/source4/scripting/bin/subunitrun index 3730a15e1b..fbbffde42c 100755 --- a/source4/scripting/bin/subunitrun +++ b/source4/scripting/bin/subunitrun @@ -38,8 +38,7 @@ args = parser.parse_args()[1] samba.tests.cmdline_loadparm = sambaopts.get_loadparm() samba.tests.cmdline_credentials = credopts.get_credentials(samba.tests.cmdline_loadparm) -import pdb -pdb.set_trace() +param.cvar.default_config = samba.tests.cmdline_loadparm runner = SubunitTestRunner() program = TestProgram(module=None, argv=[sys.argv[0]] + args, testRunner=runner) diff --git a/source4/scripting/python/samba/tests/dcerpc/registry.py b/source4/scripting/python/samba/tests/dcerpc/registry.py index 1afdc582a7..05ac7c66ee 100644 --- a/source4/scripting/python/samba/tests/dcerpc/registry.py +++ b/source4/scripting/python/samba/tests/dcerpc/registry.py @@ -23,8 +23,8 @@ from samba.tests import RpcInterfaceTestCase class WinregTests(RpcInterfaceTestCase): def setUp(self): - self.conn = winreg.winreg("ncalrpc:", self.get_loadparm(), - self.get_credentials()) + lp = self.get_loadparm() + self.conn = winreg.winreg("ncalrpc:", lp, self.get_credentials()) def get_hklm(self): return self.conn.OpenHKLM(None, diff --git a/source4/selftest/samba4_tests.sh b/source4/selftest/samba4_tests.sh index 7e545664d1..d52c240b93 100755 --- a/source4/selftest/samba4_tests.sh +++ b/source4/selftest/samba4_tests.sh @@ -342,7 +342,7 @@ plantest "unixinfo.python" dc $SUBUNITRUN samba.tests.dcerpc.unix plantest "events.python" none PYTHONPATH="$PYTHONPATH:lib/events" $SUBUNITRUN tests plantest "samba3sam.python" none PYTHONPATH="$PYTHONPATH:dsdb/samdb/ldb_modules/tests" $SUBUNITRUN samba3sam plantest "rpcecho.python" dc $SUBUNITRUN samba.tests.dcerpc.rpcecho -plantest "winreg.python" dc $SUBUNITRUN samba.tests.dcerpc.registry +plantest "winreg.python" dc $SUBUNITRUN -U\$USERNAME%\$PASSWORD samba.tests.dcerpc.registry plantest "ldap.python" dc $PYTHON $samba4srcdir/lib/ldb/tests/python/ldap.py $CONFIGURATION \$SERVER -U\$USERNAME%\$PASSWORD -W \$DOMAIN plantest "blackbox.samba3dump" none $PYTHON scripting/bin/samba3dump $samba4srcdir/../testdata/samba3 rm -rf $PREFIX/upgrade -- cgit