[SCM] Samba Shared Repository - branch v4-15-test updated

Jule Anger janger at samba.org
Mon Aug 15 09:19:01 UTC 2022


The branch, v4-15-test has been updated
       via  94bdda617e0 s3/util/py_net.c: fix samba-tool domain join&leave segfault
      from  f9815fddb5e s3:rpcclient: Goto done in cmd_samr_setuserinfo_int()

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-15-test


- Log -----------------------------------------------------------------
commit 94bdda617e018f6ae75effede3a2fae453bc47af
Author: Michael Tokarev <mjt at tls.msk.ru>
Date:   Tue May 24 16:25:41 2022 +0300

    s3/util/py_net.c: fix samba-tool domain join&leave segfault
    
    We process python args using PyArg_ParseTupleAndKeywords(), and use "p"
    type modifier there.  According to documentation, this type modifier,
    while works for a boolean type, expects an argument of type int. But in
    py_net_join_member() and  py_net_leave() we use argument of type uint8_t
    (keep_account, r->in.debug). So when PyArg_ParseTupleAndKeywords()
    tries to assign a value to &r->in.debug, it updates subsequent, unrelated bytes
    too, - which ones depends on the stack and structure layout used by the compiler.
    
    Fix this by using an int proxy variable "debug" (of the same type) for
    r->in.debug.
    
    While at it, also ensure all variables have sensible default values.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=15078
    
    Signed-off-by: Michael Tokarev <mjt at tls.msk.ru>
    Reviewed-by: Alexander Bokovoy <ab at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Wed May 25 06:19:32 UTC 2022 on sn-devel-184
    
    Backported-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    
    (backported from commit 976326fa2b6423ac5866af682605cf7584e4991a, with
     changes because 4.15 doesn't have no_dns_update, along with other
     changes that foil the patch. Also the BUG: line was added above).
    
    Autobuild-User(v4-15-test): Jule Anger <janger at samba.org>
    Autobuild-Date(v4-15-test): Mon Aug 15 09:18:25 UTC 2022 on sn-devel-184

-----------------------------------------------------------------------

Summary of changes:
 source3/utils/py_net.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/utils/py_net.c b/source3/utils/py_net.c
index 8a8a756ea21..ef2c0a0599a 100644
--- a/source3/utils/py_net.c
+++ b/source3/utils/py_net.c
@@ -67,6 +67,7 @@ static PyObject *py_net_join_member(py_net_Object *self, PyObject *args, PyObjec
 	WERROR werr;
 	PyObject *result;
 	TALLOC_CTX *mem_ctx;
+	int debug = false;
 	bool modify_config = lp_config_backend_is_registry();
 	const char *kwnames[] = { "dnshostname", "createupn", "createcomputer",
 				  "osName", "osVer", "osServicePack",
@@ -93,7 +94,7 @@ static PyObject *py_net_join_member(py_net_Object *self, PyObject *args, PyObjec
 					 &r->in.os_version,
 					 &r->in.os_servicepack,
 					 &r->in.machine_password,
-					 &r->in.debug)) {
+					 &debug)) {
 		talloc_free(mem_ctx);
 		PyErr_FromString(_("Invalid arguments\n"));
 		return NULL;
@@ -121,6 +122,7 @@ static PyObject *py_net_join_member(py_net_Object *self, PyObject *args, PyObjec
 				  WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE |
 				  WKSSVC_JOIN_FLAGS_DOMAIN_JOIN_IF_JOINED;
 	r->in.msg_ctx		= cmdline_messaging_context(get_dyn_CONFIGFILE());
+	r->in.debug		= debug;
 
 	werr = libnet_Join(mem_ctx, r);
 	if (W_ERROR_EQUAL(werr, WERR_NERR_DCNOTFOUND)) {
@@ -166,7 +168,7 @@ static PyObject *py_net_leave(py_net_Object *self, PyObject *args, PyObject *kwa
 	struct libnet_UnjoinCtx *r = NULL;
 	WERROR werr;
 	TALLOC_CTX *mem_ctx;
-	bool keep_account = false;
+	int keep_account = false, debug = false;
 	const char *kwnames[] = { "keepAccount", "debug", NULL };
 
 	mem_ctx = talloc_new(self->mem_ctx);
@@ -189,7 +191,7 @@ static PyObject *py_net_leave(py_net_Object *self, PyObject *args, PyObject *kwa
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|pp:Leave",
 					 discard_const_p(char *, kwnames),
-					 &keep_account, &r->in.debug)) {
+					 &keep_account, &debug)) {
 		talloc_free(mem_ctx);
 		PyErr_FromString(_("Invalid arguments\n"));
 		return NULL;
@@ -201,6 +203,7 @@ static PyObject *py_net_leave(py_net_Object *self, PyObject *args, PyObject *kwa
 	r->in.admin_account	= cli_credentials_get_username(self->creds);
 	r->in.admin_password	= cli_credentials_get_password(self->creds);
 	r->in.modify_config	= lp_config_backend_is_registry();
+	r->in.debug		= debug;
 
 	/*
 	 * Try to delete it, but if that fails, disable it.  The


-- 
Samba Shared Repository



More information about the samba-cvs mailing list