[SCM] Samba Shared Repository - branch master updated

Matthias Dieter Wallnöfer mdw at samba.org
Wed Oct 20 07:12:01 MDT 2010


The branch, master has been updated
       via  0941099 ldb:ldb_index.c - fix some memory leaks
       via  3bf8ca6 ldb:ldb_index.c - let "ldb_module_oom" generate the return code
       via  ec43a4d ldb:ldb_cache.c - fix memory contexts and memory leaks
       via  06053a0 ldb:ldb_tdb submodule - use "ldb_msg_new" where appropriate
       via  1427895 ldb:ldb_pack.c - remove superflous "message->elements = NULL"
       via  caf6b36 libcli/security/access_check.c - fix a memory leak
      from  efb22bf s3: Add some DEBUG

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 0941099a2839812b18c2d3db86b18e92b152f1c8
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Wed Oct 20 14:27:04 2010 +0200

    ldb:ldb_index.c - fix some memory leaks
    
    Autobuild-User: Matthias Dieter Wallnöfer <mdw at samba.org>
    Autobuild-Date: Wed Oct 20 13:11:49 UTC 2010 on sn-devel-104

commit 3bf8ca67900a10e608808535358a148455827a2e
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Wed Oct 20 14:26:37 2010 +0200

    ldb:ldb_index.c - let "ldb_module_oom" generate the return code

commit ec43a4d29e3bb395e7a8d7edafb6dedfeb9baec2
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Wed Oct 20 14:08:53 2010 +0200

    ldb:ldb_cache.c - fix memory contexts and memory leaks

commit 06053a09cbf42cde12d69d0a296fb25f425aae67
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Wed Oct 20 13:53:14 2010 +0200

    ldb:ldb_tdb submodule - use "ldb_msg_new" where appropriate
    
    It is saver than a manual "talloc".

commit 1427895531c259f4bb6c561972b79051807c2a4d
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Wed Oct 20 13:47:48 2010 +0200

    ldb:ldb_pack.c - remove superflous "message->elements = NULL"
    
    It's already marked at this at the beginning of the call.

commit caf6b3686fb7f18b17e0b89f519f216ac98df3be
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Wed Oct 20 13:40:19 2010 +0200

    libcli/security/access_check.c - fix a memory leak

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

Summary of changes:
 libcli/security/access_check.c      |   19 ++++++++++++-------
 source4/lib/ldb/ldb_tdb/ldb_cache.c |   23 ++++++++++++-----------
 source4/lib/ldb/ldb_tdb/ldb_index.c |   30 ++++++++++++++----------------
 source4/lib/ldb/ldb_tdb/ldb_pack.c  |    1 -
 source4/lib/ldb/ldb_tdb/ldb_tdb.c   |    8 ++++----
 5 files changed, 42 insertions(+), 39 deletions(-)


Changeset truncated at 500 lines:

diff --git a/libcli/security/access_check.c b/libcli/security/access_check.c
index 35ee057..a00e42b 100644
--- a/libcli/security/access_check.c
+++ b/libcli/security/access_check.c
@@ -287,7 +287,7 @@ NTSTATUS sec_access_check_ds(const struct security_descriptor *sd,
         uint32_t bits_remaining;
         struct object_tree *node;
         const struct GUID *type;
-	struct dom_sid *ps_sid = dom_sid_parse_talloc(NULL, SID_NT_SELF);
+        struct dom_sid *ps_sid = dom_sid_parse_talloc(sd, SID_NT_SELF);
 
         *access_granted = access_desired;
         bits_remaining = access_desired;
@@ -304,13 +304,15 @@ NTSTATUS sec_access_check_ds(const struct security_descriptor *sd,
                 if (security_token_has_privilege(token, SEC_PRIV_SECURITY)) {
                         bits_remaining &= ~SEC_FLAG_SYSTEM_SECURITY;
                 } else {
+                        talloc_free(ps_sid);
                         return NT_STATUS_PRIVILEGE_NOT_HELD;
                 }
         }
 
         /* a NULL dacl allows access */
         if ((sd->type & SEC_DESC_DACL_PRESENT) && sd->dacl == NULL) {
-		*access_granted = access_desired;
+                *access_granted = access_desired;
+                talloc_free(ps_sid);
                 return NT_STATUS_OK;
         }
 
@@ -356,6 +358,7 @@ NTSTATUS sec_access_check_ds(const struct security_descriptor *sd,
                         break;
                 case SEC_ACE_TYPE_ACCESS_DENIED:
                         if (bits_remaining & ace->access_mask) {
+                                talloc_free(ps_sid);
                                 return NT_STATUS_ACCESS_DENIED;
                         }
                         break;
@@ -377,12 +380,13 @@ NTSTATUS sec_access_check_ds(const struct security_descriptor *sd,
 
                         if (ace->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT) {
                                 object_tree_modify_access(node, ace->access_mask);
-				if (node->remaining_access == 0) {
-					return NT_STATUS_OK;
-				}
-                        }
-                        else {
+                                if (node->remaining_access == 0) {
+                                        talloc_free(ps_sid);
+                                        return NT_STATUS_OK;
+                                }
+                        } else {
                                 if (node->remaining_access & ace->access_mask){
+                                        talloc_free(ps_sid);
                                         return NT_STATUS_ACCESS_DENIED;
                                 }
                         }
@@ -393,6 +397,7 @@ NTSTATUS sec_access_check_ds(const struct security_descriptor *sd,
         }
 
 done:
+        talloc_free(ps_sid);
         if (bits_remaining != 0) {
                 return NT_STATUS_ACCESS_DENIED;
         }
diff --git a/source4/lib/ldb/ldb_tdb/ldb_cache.c b/source4/lib/ldb/ldb_tdb/ldb_cache.c
index 2f0ba22..6b1eb5b 100644
--- a/source4/lib/ldb/ldb_tdb/ldb_cache.c
+++ b/source4/lib/ldb/ldb_tdb/ldb_cache.c
@@ -203,7 +203,7 @@ static int ltdb_baseinfo_init(struct ldb_module *module)
 
 	ltdb->sequence_number = atof(initial_sequence_number);
 
-	msg = talloc(ltdb, struct ldb_message);
+	msg = ldb_msg_new(ltdb);
 	if (msg == NULL) {
 		goto failed;
 	}
@@ -287,18 +287,18 @@ int ltdb_cache_load(struct ldb_module *module)
 	if (ltdb->cache == NULL) {
 		ltdb->cache = talloc_zero(ltdb, struct ltdb_cache);
 		if (ltdb->cache == NULL) goto failed;
-		ltdb->cache->indexlist = talloc_zero(ltdb->cache, struct ldb_message);
-		ltdb->cache->attributes = talloc_zero(ltdb->cache, struct ldb_message);
+		ltdb->cache->indexlist = ldb_msg_new(ltdb->cache);
+		ltdb->cache->attributes = ldb_msg_new(ltdb->cache);
 		if (ltdb->cache->indexlist == NULL ||
 		    ltdb->cache->attributes == NULL) {
 			goto failed;
 		}
 	}
 
-	baseinfo = talloc(ltdb->cache, struct ldb_message);
+	baseinfo = ldb_msg_new(ltdb->cache);
 	if (baseinfo == NULL) goto failed;
 
-	baseinfo_dn = ldb_dn_new(module, ldb, LTDB_BASEINFO);
+	baseinfo_dn = ldb_dn_new(baseinfo, ldb, LTDB_BASEINFO);
 	if (baseinfo_dn == NULL) goto failed;
 
 	r= ltdb_search_dn1(module, baseinfo_dn, baseinfo);
@@ -327,7 +327,7 @@ int ltdb_cache_load(struct ldb_module *module)
 	ltdb->sequence_number = seq;
 
 	/* Read an interpret database options */
-	options = talloc(ltdb->cache, struct ldb_message);
+	options = ldb_msg_new(ltdb->cache);
 	if (options == NULL) goto failed;
 
 	options_dn = ldb_dn_new(options, ldb, LTDB_OPTIONS);
@@ -351,9 +351,10 @@ int ltdb_cache_load(struct ldb_module *module)
 	ltdb_attributes_unload(module);
 
 	talloc_free(ltdb->cache->indexlist);
+	talloc_free(ltdb->cache->attributes);
 
-	ltdb->cache->indexlist = talloc_zero(ltdb->cache, struct ldb_message);
-	ltdb->cache->attributes = talloc_zero(ltdb->cache, struct ldb_message);
+	ltdb->cache->indexlist = ldb_msg_new(ltdb->cache);
+	ltdb->cache->attributes = ldb_msg_new(ltdb->cache);
 	if (ltdb->cache->indexlist == NULL ||
 	    ltdb->cache->attributes == NULL) {
 		goto failed;
@@ -383,14 +384,12 @@ int ltdb_cache_load(struct ldb_module *module)
 done:
 	talloc_free(options);
 	talloc_free(baseinfo);
-	talloc_free(baseinfo_dn);
 	talloc_free(indexlist_dn);
 	return 0;
 
 failed:
 	talloc_free(options);
 	talloc_free(baseinfo);
-	talloc_free(baseinfo_dn);
 	talloc_free(indexlist_dn);
 	return -1;
 }
@@ -414,7 +413,7 @@ int ltdb_increase_sequence_number(struct ldb_module *module)
 
 	ldb = ldb_module_get_ctx(module);
 
-	msg = talloc(ltdb, struct ldb_message);
+	msg = ldb_msg_new(ltdb);
 	if (msg == NULL) {
 		errno = ENOMEM;
 		return LDB_ERR_OPERATIONS_ERROR;
@@ -422,6 +421,7 @@ int ltdb_increase_sequence_number(struct ldb_module *module)
 
 	s = talloc_asprintf(msg, "%llu", ltdb->sequence_number+1);
 	if (!s) {
+		talloc_free(msg);
 		errno = ENOMEM;
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
@@ -458,6 +458,7 @@ int ltdb_increase_sequence_number(struct ldb_module *module)
 
 	s = ldb_timestring(msg, t);
 	if (s == NULL) {
+		talloc_free(msg);
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
 
diff --git a/source4/lib/ldb/ldb_tdb/ldb_index.c b/source4/lib/ldb/ldb_tdb/ldb_index.c
index db49455..71cffb9 100644
--- a/source4/lib/ldb/ldb_tdb/ldb_index.c
+++ b/source4/lib/ldb/ldb_tdb/ldb_index.c
@@ -179,6 +179,7 @@ normal_index:
 
 	ret = ltdb_search_dn1(module, dn, msg);
 	if (ret != LDB_SUCCESS) {
+		talloc_free(msg);
 		return ret;
 	}
 
@@ -217,15 +218,13 @@ static int ltdb_dn_list_store_full(struct ldb_module *module, struct ldb_dn *dn,
 
 	msg = ldb_msg_new(module);
 	if (!msg) {
-		ldb_module_oom(module);
-		return LDB_ERR_OPERATIONS_ERROR;
+		return ldb_module_oom(module);
 	}
 
 	ret = ldb_msg_add_fmt(msg, LTDB_IDXVERSION, "%u", LTDB_INDEXING_VERSION);
 	if (ret != LDB_SUCCESS) {
 		talloc_free(msg);
-		ldb_module_oom(module);
-		return LDB_ERR_OPERATIONS_ERROR;
+		return ldb_module_oom(module);
 	}
 
 	msg->dn = dn;
@@ -234,9 +233,8 @@ static int ltdb_dn_list_store_full(struct ldb_module *module, struct ldb_dn *dn,
 
 		ret = ldb_msg_add_empty(msg, LTDB_IDX, LDB_FLAG_MOD_ADD, &el);
 		if (ret != LDB_SUCCESS) {
-			ldb_module_oom(module);
 			talloc_free(msg);
-			return LDB_ERR_OPERATIONS_ERROR;
+			return ldb_module_oom(module);
 		}
 		el->values = list->dn;
 		el->num_values = list->count;
@@ -347,13 +345,13 @@ int ltdb_index_transaction_commit(struct ldb_module *module)
 	struct ldb_context *ldb = ldb_module_get_ctx(module);
 
 	ldb_reset_err_string(ldb);
+
 	if (ltdb->idxptr->itdb) {
 		tdb_traverse(ltdb->idxptr->itdb, ltdb_index_traverse_store, module);
 		tdb_close(ltdb->idxptr->itdb);
 	}
 
 	ret = ltdb->idxptr->error;
-
 	if (ret != LDB_SUCCESS) {
 		if (!ldb_errstring(ldb)) {
 			ldb_set_errstring(ldb, ldb_strerror(ret));
@@ -415,7 +413,10 @@ static struct ldb_dn *ltdb_index_key(struct ldb_context *ldb,
 	}
 	if (ldb_should_b64_encode(ldb, &v)) {
 		char *vstr = ldb_base64_encode(ldb, (char *)v.data, v.length);
-		if (!vstr) return NULL;
+		if (!vstr) {
+			talloc_free(attr_folded);
+			return NULL;
+		}
 		ret = ldb_dn_new_fmt(ldb, ldb, "%s:%s::%s", LTDB_INDEX, attr_folded, vstr);
 		talloc_free(vstr);
 	} else {
@@ -774,8 +775,7 @@ static int ltdb_index_dn_and(struct ldb_module *module,
 
 		list2 = talloc_zero(list, struct dn_list);
 		if (list2 == NULL) {
-			ldb_module_oom(module);
-			return LDB_ERR_OPERATIONS_ERROR;
+			return ldb_module_oom(module);
 		}
 			
 		ret = ltdb_index_dn(module, subtree, index_list, list2);
@@ -966,6 +966,7 @@ static int ltdb_index_filter(const struct dn_list *dn_list,
 
 		ret = ldb_module_send_entry(ac->req, msg, NULL);
 		if (ret != LDB_SUCCESS) {
+			talloc_free(msg);
 			ac->request_terminated = true;
 			return ret;
 		}
@@ -1023,23 +1024,20 @@ int ltdb_search_indexed(struct ltdb_context *ac, uint32_t *match_count)
 
 	dn_list = talloc_zero(ac, struct dn_list);
 	if (dn_list == NULL) {
-		ldb_module_oom(ac->module);
-		return LDB_ERR_OPERATIONS_ERROR;
+		return ldb_module_oom(ac->module);
 	}
 
 	switch (ac->scope) {
 	case LDB_SCOPE_BASE:
 		dn_list->dn = talloc_array(dn_list, struct ldb_val, 1);
 		if (dn_list->dn == NULL) {
-			ldb_module_oom(ac->module);
 			talloc_free(dn_list);
-			return LDB_ERR_OPERATIONS_ERROR;
+			return ldb_module_oom(ac->module);
 		}
 		dn_list->dn[0].data = discard_const_p(unsigned char, ldb_dn_get_linearized(ac->base));
 		if (dn_list->dn[0].data == NULL) {
-			ldb_module_oom(ac->module);
 			talloc_free(dn_list);
-			return LDB_ERR_OPERATIONS_ERROR;
+			return ldb_module_oom(ac->module);
 		}
 		dn_list->dn[0].length = strlen((char *)dn_list->dn[0].data);
 		dn_list->count = 1;
diff --git a/source4/lib/ldb/ldb_tdb/ldb_pack.c b/source4/lib/ldb/ldb_tdb/ldb_pack.c
index e7aeb47..396b80a 100644
--- a/source4/lib/ldb/ldb_tdb/ldb_pack.c
+++ b/source4/lib/ldb/ldb_tdb/ldb_pack.c
@@ -208,7 +208,6 @@ int ltdb_unpack_data(struct ldb_module *module,
 	}
 
 	if (message->num_elements == 0) {
-		message->elements = NULL;
 		return 0;
 	}
 	
diff --git a/source4/lib/ldb/ldb_tdb/ldb_tdb.c b/source4/lib/ldb/ldb_tdb/ldb_tdb.c
index 1637c66..25ec1b0 100644
--- a/source4/lib/ldb/ldb_tdb/ldb_tdb.c
+++ b/source4/lib/ldb/ldb_tdb/ldb_tdb.c
@@ -373,7 +373,7 @@ static int ltdb_delete_internal(struct ldb_module *module, struct ldb_dn *dn)
 	struct ldb_message *msg;
 	int ret = LDB_SUCCESS;
 
-	msg = talloc(module, struct ldb_message);
+	msg = ldb_msg_new(module);
 	if (msg == NULL) {
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
@@ -629,7 +629,7 @@ int ltdb_modify_internal(struct ldb_module *module,
 		return ltdb_err_map(tdb_error(ltdb->tdb));
 	}
 
-	msg2 = talloc(tdb_key.dptr, struct ldb_message);
+	msg2 = ldb_msg_new(tdb_key.dptr);
 	if (msg2 == NULL) {
 		free(tdb_data.dptr);
 		ret = LDB_ERR_OTHER;
@@ -912,7 +912,7 @@ static int ltdb_rename(struct ltdb_context *ctx)
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
 
-	msg = talloc(ctx, struct ldb_message);
+	msg = ldb_msg_new(ctx);
 	if (msg == NULL) {
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
@@ -1070,7 +1070,7 @@ static int ltdb_sequence_number(struct ltdb_context *ctx,
 
 	dn = ldb_dn_new(tmp_ctx, ldb, LTDB_BASEINFO);
 
-	msg = talloc(tmp_ctx, struct ldb_message);
+	msg = ldb_msg_new(tmp_ctx);
 	if (msg == NULL) {
 		ret = LDB_ERR_OPERATIONS_ERROR;
 		goto done;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list