]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
plydb: Keep talloc_reference() to the DN in PyDict_AsMessage
authorAndrew Bartlett <abartlet@samba.org>
Mon, 25 Mar 2024 09:33:02 +0000 (22:33 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 28 Mar 2024 01:50:41 +0000 (01:50 +0000)
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
lib/ldb/pyldb.c

index fc11599a93d511e7101943f6d75901bbbf76b9f7..67e6141d1b880210c8cc1093da40ef8cad49de8d 100644 (file)
@@ -1425,16 +1425,23 @@ static struct ldb_message *PyDict_AsMessage(TALLOC_CTX *mem_ctx,
        }
 
        if (dn_value) {
-               if (!pyldb_Object_AsDn(msg, dn_value, ldb_ctx, &msg->dn)) {
+               struct ldb_dn *dn = NULL;
+               if (!pyldb_Object_AsDn(msg, dn_value, ldb_ctx, &dn)) {
                        PyErr_SetString(PyExc_TypeError, "unable to import dn object");
                        TALLOC_FREE(msg);
                        return NULL;
                }
-               if (msg->dn == NULL) {
+               if (dn == NULL) {
                        PyErr_SetString(PyExc_TypeError, "dn set but not found");
                        TALLOC_FREE(msg);
                        return NULL;
                }
+               msg->dn = talloc_reference(msg, dn);
+               if (msg->dn == NULL) {
+                       talloc_free(mem_ctx);
+                       PyErr_NoMemory();
+                       return NULL;
+               }
        } else {
                PyErr_SetString(PyExc_TypeError, "no dn set");
                TALLOC_FREE(msg);