From: Stefan Metzmacher Date: Fri, 9 May 2025 11:30:36 +0000 (+0200) Subject: s4:libnet: pass an explicit talloc parent to libnet_context_init() X-Git-Tag: tevent-0.17.0~150 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07c8b79d85330ff4ddd29eb1a797fae3f893d96a;p=thirdparty%2Fsamba.git s4:libnet: pass an explicit talloc parent to libnet_context_init() We should not implicitly use the tevent_context as talloc parent. Signed-off-by: Stefan Metzmacher Reviewed-by: Andreas Schneider --- diff --git a/source4/lib/policy/gp_ldap.c b/source4/lib/policy/gp_ldap.c index 67b329b1295..2806c128493 100644 --- a/source4/lib/policy/gp_ldap.c +++ b/source4/lib/policy/gp_ldap.c @@ -160,7 +160,7 @@ NTSTATUS gp_init(TALLOC_CTX *mem_ctx, NTSTATUS rv; /* Initialise the libnet context */ - net_ctx = libnet_context_init(ev_ctx, lp_ctx); + net_ctx = libnet_context_init(mem_ctx, ev_ctx, lp_ctx); net_ctx->cred = credentials; /* Prepare libnet lookup structure for looking a DC (PDC is correct). */ diff --git a/source4/libnet/libnet.c b/source4/libnet/libnet.c index a590893bee2..b04be2187f9 100644 --- a/source4/libnet/libnet.c +++ b/source4/libnet/libnet.c @@ -23,7 +23,8 @@ #include "param/param.h" #include "libcli/resolve/resolve.h" -struct libnet_context *libnet_context_init(struct tevent_context *ev, +struct libnet_context *libnet_context_init(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, struct loadparm_context *lp_ctx) { struct libnet_context *ctx; @@ -34,7 +35,7 @@ struct libnet_context *libnet_context_init(struct tevent_context *ev, } /* create brand new libnet context */ - ctx = talloc_zero(ev, struct libnet_context); + ctx = talloc_zero(mem_ctx, struct libnet_context); if (!ctx) { return NULL; } diff --git a/source4/libnet/py_net.c b/source4/libnet/py_net.c index b65bd5c2a73..d53d345e45d 100644 --- a/source4/libnet/py_net.c +++ b/source4/libnet/py_net.c @@ -865,7 +865,9 @@ static PyMethodDef net_obj_methods[] = { static void py_net_dealloc(py_net_Object *self) { - talloc_free(self->ev); + /* explicitly free libnet_ctx before ev */ + talloc_free(self->libnet_ctx); + talloc_free(self->mem_ctx); PyObject_Del(self); } @@ -889,8 +891,8 @@ static PyObject *net_obj_new(PyTypeObject *type, PyObject *args, PyObject *kwarg /* FIXME: we really need to get a context from the caller or we may end * up with 2 event contexts */ - ret->ev = s4_event_context_init(NULL); - ret->mem_ctx = talloc_new(ret->ev); + ret->mem_ctx = talloc_new(NULL); + ret->ev = s4_event_context_init(ret->mem_ctx); lp = lpcfg_from_py_object(ret->mem_ctx, py_lp); if (lp == NULL) { @@ -898,7 +900,7 @@ static PyObject *net_obj_new(PyTypeObject *type, PyObject *args, PyObject *kwarg return NULL; } - ret->libnet_ctx = libnet_context_init(ret->ev, lp); + ret->libnet_ctx = libnet_context_init(ret->mem_ctx, ret->ev, lp); if (ret->libnet_ctx == NULL) { PyErr_SetString(PyExc_RuntimeError, "Unable to initialize net"); Py_DECREF(ret); diff --git a/source4/torture/libnet/domain.c b/source4/torture/libnet/domain.c index c1cfc919d00..743d0857963 100644 --- a/source4/torture/libnet/domain.c +++ b/source4/torture/libnet/domain.c @@ -85,7 +85,7 @@ bool torture_domainopen(struct torture_context *torture) mem_ctx = talloc_init("test_domain_open"); - net_ctx = libnet_context_init(torture->ev, torture->lp_ctx); + net_ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); status = torture_rpc_connection(torture, &net_ctx->samr.pipe, diff --git a/source4/torture/libnet/libnet_BecomeDC.c b/source4/torture/libnet/libnet_BecomeDC.c index e88198daf2b..5530fa514cf 100644 --- a/source4/torture/libnet/libnet_BecomeDC.c +++ b/source4/torture/libnet/libnet_BecomeDC.c @@ -92,7 +92,7 @@ bool torture_net_become_dc(struct torture_context *torture) location); torture_assert(torture, s, "libnet_vampire_cb_state_init"); - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); ctx->cred = samba_cmdline_get_creds(); ZERO_STRUCT(b); diff --git a/source4/torture/libnet/libnet_domain.c b/source4/torture/libnet/libnet_domain.c index 24440005aac..c1c83fd39a4 100644 --- a/source4/torture/libnet/libnet_domain.c +++ b/source4/torture/libnet/libnet_domain.c @@ -135,7 +135,7 @@ bool torture_domain_open_lsa(struct torture_context *torture) of specific server name. */ domain_name = lpcfg_workgroup(torture->lp_ctx); - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); if (ctx == NULL) { torture_comment(torture, "failed to create libnet context\n"); return false; @@ -189,7 +189,7 @@ bool torture_domain_close_lsa(struct torture_context *torture) return false; } - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); if (ctx == NULL) { torture_comment(torture, "failed to create libnet context\n"); ret = false; @@ -251,7 +251,7 @@ bool torture_domain_open_samr(struct torture_context *torture) mem_ctx = talloc_init("test_domainopen_lsa"); - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); ctx->cred = samba_cmdline_get_creds(); /* we're accessing domain controller so the domain name should be @@ -316,7 +316,7 @@ bool torture_domain_close_samr(struct torture_context *torture) return false; } - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); if (ctx == NULL) { torture_comment(torture, "failed to create libnet context\n"); ret = false; @@ -380,7 +380,7 @@ bool torture_domain_list(struct torture_context *torture) return false; } - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); if (ctx == NULL) { torture_comment(torture, "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 e3e20307d3a..949f82b89e1 100644 --- a/source4/torture/libnet/libnet_group.c +++ b/source4/torture/libnet/libnet_group.c @@ -113,7 +113,7 @@ bool torture_grouplist(struct torture_context *torture) struct libnet_GroupList req; int i; - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); ctx->cred = samba_cmdline_get_creds(); domain_name.string = lpcfg_workgroup(torture->lp_ctx); @@ -176,7 +176,7 @@ bool torture_creategroup(struct torture_context *torture) mem_ctx = talloc_init("test_creategroup"); - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); ctx->cred = samba_cmdline_get_creds(); req.in.group_name = TEST_GROUPNAME; diff --git a/source4/torture/libnet/libnet_lookup.c b/source4/torture/libnet/libnet_lookup.c index e6e23dc0495..5adc7daa6b8 100644 --- a/source4/torture/libnet/libnet_lookup.c +++ b/source4/torture/libnet/libnet_lookup.c @@ -38,7 +38,7 @@ bool torture_lookup(struct torture_context *torture) mem_ctx = talloc_init("test_lookup"); - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); ctx->cred = samba_cmdline_get_creds(); lookup.in.hostname = torture_setting_string(torture, "host", NULL); @@ -82,7 +82,7 @@ bool torture_lookup_host(struct torture_context *torture) mem_ctx = talloc_init("test_lookup_host"); - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); ctx->cred = samba_cmdline_get_creds(); lookup.in.hostname = torture_setting_string(torture, "host", NULL); @@ -125,7 +125,7 @@ bool torture_lookup_pdc(struct torture_context *torture) mem_ctx = talloc_init("test_lookup_pdc"); - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); ctx->cred = samba_cmdline_get_creds(); talloc_steal(ctx, mem_ctx); @@ -170,7 +170,7 @@ bool torture_lookup_sam_name(struct torture_context *torture) struct libnet_LookupName r; bool ret = true; - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); ctx->cred = samba_cmdline_get_creds(); 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 9820432e224..358cc09e20d 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(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); ctx->cred = samba_cmdline_get_creds(); torture_comment(torture, "Testing connection to LSA interface\n"); diff --git a/source4/torture/libnet/libnet_share.c b/source4/torture/libnet/libnet_share.c index da74b99f8ad..7303e01af25 100644 --- a/source4/torture/libnet/libnet_share.c +++ b/source4/torture/libnet/libnet_share.c @@ -175,7 +175,7 @@ bool torture_listshares(struct torture_context *torture) goto done; } - libnetctx = libnet_context_init(torture->ev, torture->lp_ctx); + libnetctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); if (!libnetctx) { torture_comment(torture, "Couldn't allocate libnet context\n"); ret = false; @@ -262,7 +262,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(torture->ev, torture->lp_ctx); + libnetctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); libnetctx->cred = samba_cmdline_get_creds(); status = torture_rpc_connection(torture, diff --git a/source4/torture/libnet/libnet_user.c b/source4/torture/libnet/libnet_user.c index 9029827f203..f1f883ee11c 100644 --- a/source4/torture/libnet/libnet_user.c +++ b/source4/torture/libnet/libnet_user.c @@ -465,7 +465,7 @@ bool torture_userlist(struct torture_context *torture) struct libnet_UserList req; int i; - ctx = libnet_context_init(torture->ev, torture->lp_ctx); + ctx = libnet_context_init(torture, torture->ev, torture->lp_ctx); ctx->cred = samba_cmdline_get_creds(); domain_name.string = lpcfg_workgroup(torture->lp_ctx); diff --git a/source4/torture/libnet/utils.c b/source4/torture/libnet/utils.c index de859d57a1d..719a4514b3c 100644 --- a/source4/torture/libnet/utils.c +++ b/source4/torture/libnet/utils.c @@ -489,7 +489,7 @@ bool test_libnet_context_init(struct torture_context *tctx, bool bret = true; struct libnet_context *net_ctx; - net_ctx = libnet_context_init(tctx->ev, tctx->lp_ctx); + net_ctx = libnet_context_init(tctx, tctx->ev, tctx->lp_ctx); torture_assert(tctx, net_ctx != NULL, "Failed to create libnet_context"); /* Use command line credentials for testing */ diff --git a/source4/torture/rpc/dfs.c b/source4/torture/rpc/dfs.c index 14af2889727..adb78e90283 100644 --- a/source4/torture/rpc/dfs.c +++ b/source4/torture/rpc/dfs.c @@ -52,7 +52,7 @@ static bool test_NetShareAdd(struct torture_context *tctx, printf("Creating share %s\n", sharename); - if (!(libnetctx = libnet_context_init(tctx->ev, tctx->lp_ctx))) { + if (!(libnetctx = libnet_context_init(tctx, tctx->ev, tctx->lp_ctx))) { return false; } @@ -91,7 +91,7 @@ static bool test_NetShareDel(struct torture_context *tctx, torture_comment(tctx, "Deleting share %s\n", sharename); - if (!(libnetctx = libnet_context_init(tctx->ev, tctx->lp_ctx))) { + if (!(libnetctx = libnet_context_init(tctx, tctx->ev, tctx->lp_ctx))) { return false; } diff --git a/source4/torture/rpc/testjoin.c b/source4/torture/rpc/testjoin.c index 133b9f09c43..1308811b76f 100644 --- a/source4/torture/rpc/testjoin.c +++ b/source4/torture/rpc/testjoin.c @@ -546,7 +546,7 @@ _PUBLIC_ struct test_join *torture_join_domain(struct torture_context *tctx, return NULL; } - libnet_ctx = libnet_context_init(tctx->ev, tctx->lp_ctx); + libnet_ctx = libnet_context_init(tctx, tctx->ev, tctx->lp_ctx); if (!libnet_ctx) { talloc_free(tj); return NULL;