[SCM] Samba Shared Repository - branch master updated

Matthias Dieter Wallnöfer mdw at samba.org
Tue Oct 13 09:26:50 MDT 2009


The branch, master has been updated
       via  6b91a2a... s4:dcesrv_samr - prevent "ldb_modify" on a possibly empty message
       via  7c53386... s4:dcesrv_samr - Add additional "talloc_free"s
       via  6e19a9e... s4:dcesrv_samr - Cosmetics
      from  a889303... s4:ldb_tdb - Revert some introduced "trivial gotos"

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


- Log -----------------------------------------------------------------
commit 6b91a2ad8ebf6368c81eefdd225548e42a2ed0c4
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date:   Tue Oct 13 00:48:15 2009 +0200

    s4:dcesrv_samr - prevent "ldb_modify" on a possibly empty message
    
    In this code part under certain circumstances we can end up with an empty message.
    Since our new behaviour denies them (like the real AD) we need to bypass them
    on LDB modify calls.

commit 7c53386adfb4658df11ed951614bbb7ec74af1cb
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date:   Tue Oct 13 00:45:26 2009 +0200

    s4:dcesrv_samr - Add additional "talloc_free"s

commit 6e19a9e05d6085224c0e6a0b46a0f7e468188124
Author: Matthias Dieter Wallnöfer <mwallnoefer at yahoo.de>
Date:   Tue Oct 13 00:15:19 2009 +0200

    s4:dcesrv_samr - Cosmetics
    
    Make more use of constants and add some braces around "if" blocks

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

Summary of changes:
 source4/rpc_server/samr/dcesrv_samr.c |   74 +++++++++++++++++++-------------
 1 files changed, 44 insertions(+), 30 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c
index b8af5fd..00820a3 100644
--- a/source4/rpc_server/samr/dcesrv_samr.c
+++ b/source4/rpc_server/samr/dcesrv_samr.c
@@ -949,7 +949,7 @@ static NTSTATUS dcesrv_samr_SetDomainInfo(struct dcesrv_call_state *dce_call, TA
 
 	/* modify the samdb record */
 	ret = ldb_modify(sam_ctx, msg);
-	if (ret != 0) {
+	if (ret != LDB_SUCCESS) {
 		DEBUG(1,("Failed to modify record %s: %s\n",
 			 ldb_dn_get_linearized(d_state->domain_dn),
 			 ldb_errstring(sam_ctx)));
@@ -1234,7 +1234,7 @@ static NTSTATUS dcesrv_samr_CreateUser2(struct dcesrv_call_state *dce_call, TALL
 	 */
 
 	ret = ldb_transaction_start(d_state->sam_ctx);
-	if (ret != 0) {
+	if (ret != LDB_SUCCESS) {
 		DEBUG(0,("Failed to start a transaction for user creation: %s\n",
 			 ldb_errstring(d_state->sam_ctx)));
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
@@ -1389,7 +1389,7 @@ static NTSTATUS dcesrv_samr_CreateUser2(struct dcesrv_call_state *dce_call, TALL
 
 	/* modify the samdb record */
 	ret = samdb_replace(a_state->sam_ctx, mem_ctx, msg);
-	if (ret != 0) {
+	if (ret != LDB_SUCCESS) {
 		DEBUG(0,("Failed to modify account record %s to set userAccountControl: %s\n",
 			 ldb_dn_get_linearized(msg->dn),
 			 ldb_errstring(d_state->sam_ctx)));
@@ -1400,7 +1400,7 @@ static NTSTATUS dcesrv_samr_CreateUser2(struct dcesrv_call_state *dce_call, TALL
 	}
 
 	ret = ldb_transaction_commit(d_state->sam_ctx);
-	if (ret != 0) {
+	if (ret != LDB_SUCCESS) {
 		DEBUG(0,("Failed to commit transaction to add and modify account record %s: %s\n",
 			 ldb_dn_get_linearized(msg->dn),
 			 ldb_errstring(d_state->sam_ctx)));
@@ -2193,7 +2193,7 @@ static NTSTATUS dcesrv_samr_SetGroupInfo(struct dcesrv_call_state *dce_call, TAL
 
 	/* modify the samdb record */
 	ret = ldb_modify(g_state->sam_ctx, msg);
-	if (ret != 0) {
+	if (ret != LDB_SUCCESS) {
 		/* we really need samdb.c to return NTSTATUS */
 		return NT_STATUS_UNSUCCESSFUL;
 	}
@@ -2224,8 +2224,9 @@ static NTSTATUS dcesrv_samr_AddGroupMember(struct dcesrv_call_state *dce_call, T
 	d_state = a_state->domain_state;
 
 	membersid = dom_sid_add_rid(mem_ctx, d_state->domain_sid, r->in.rid);
-	if (membersid == NULL)
+	if (membersid == NULL) {
 		return NT_STATUS_NO_MEMORY;
+	}
 
 	/* In native mode, AD can also nest domain groups. Not sure yet
 	 * whether this is also available via RPC. */
@@ -2234,7 +2235,7 @@ static NTSTATUS dcesrv_samr_AddGroupMember(struct dcesrv_call_state *dce_call, T
 				 "(&(objectSid=%s)(objectclass=user))",
 				 ldap_encode_ndr_dom_sid(mem_ctx, membersid));
 
-	if (ret != 0) {
+	if (ret != LDB_SUCCESS) {
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
 	}
 
@@ -2258,9 +2259,11 @@ static NTSTATUS dcesrv_samr_AddGroupMember(struct dcesrv_call_state *dce_call, T
 
 	mod->dn = talloc_reference(mem_ctx, a_state->account_dn);
 
-	if (samdb_msg_add_addval(d_state->sam_ctx, mem_ctx, mod, "member",
-				 memberdn) != 0)
+	ret = samdb_msg_add_addval(d_state->sam_ctx, mem_ctx, mod, "member",
+								memberdn);
+	if (ret != LDB_SUCCESS) {
 		return NT_STATUS_UNSUCCESSFUL;
+	}
 
 	ret = ldb_modify(a_state->sam_ctx, mod);
 	switch (ret) {
@@ -2273,7 +2276,6 @@ static NTSTATUS dcesrv_samr_AddGroupMember(struct dcesrv_call_state *dce_call, T
 	default:
 		return NT_STATUS_UNSUCCESSFUL;
 	}
-
 }
 
 
@@ -2294,7 +2296,7 @@ static NTSTATUS dcesrv_samr_DeleteDomainGroup(struct dcesrv_call_state *dce_call
 	a_state = h->data;
 
 	ret = ldb_delete(a_state->sam_ctx, a_state->account_dn);
-	if (ret != 0) {
+	if (ret != LDB_SUCCESS) {
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
@@ -2336,7 +2338,7 @@ static NTSTATUS dcesrv_samr_DeleteGroupMember(struct dcesrv_call_state *dce_call
 				 "(&(objectSid=%s)(objectclass=user))",
 				 ldap_encode_ndr_dom_sid(mem_ctx, membersid));
 
-	if (ret != 0) {
+	if (ret != LDB_SUCCESS) {
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
 	}
 
@@ -2360,8 +2362,9 @@ static NTSTATUS dcesrv_samr_DeleteGroupMember(struct dcesrv_call_state *dce_call
 
 	mod->dn = talloc_reference(mem_ctx, a_state->account_dn);
 
-	if (samdb_msg_add_delval(d_state->sam_ctx, mem_ctx, mod, "member",
-				 memberdn) != 0) {
+	ret = samdb_msg_add_delval(d_state->sam_ctx, mem_ctx, mod, "member",
+								memberdn);
+	if (ret != LDB_SUCCESS) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -2732,12 +2735,15 @@ static NTSTATUS dcesrv_samr_AddAliasMember(struct dcesrv_call_state *dce_call, T
 
 	mod->dn = talloc_reference(mem_ctx, a_state->account_dn);
 
-	if (samdb_msg_add_addval(d_state->sam_ctx, mem_ctx, mod, "member",
-				 ldb_dn_alloc_linearized(mem_ctx, memberdn)) != 0)
+	ret = samdb_msg_add_addval(d_state->sam_ctx, mem_ctx, mod, "member",
+				 ldb_dn_alloc_linearized(mem_ctx, memberdn));
+	if (ret != LDB_SUCCESS) {
 		return NT_STATUS_UNSUCCESSFUL;
+	}
 
-	if (ldb_modify(a_state->sam_ctx, mod) != 0)
+	if (ldb_modify(a_state->sam_ctx, mod) != LDB_SUCCESS) {
 		return NT_STATUS_UNSUCCESSFUL;
+	}
 
 	return NT_STATUS_OK;
 }
@@ -2754,6 +2760,7 @@ static NTSTATUS dcesrv_samr_DeleteAliasMember(struct dcesrv_call_state *dce_call
 	struct samr_domain_state *d_state;
 	struct ldb_message *mod;
 	const char *memberdn;
+	int ret;
 
 	DCESRV_PULL_HANDLE(h, r->in.alias_handle, SAMR_HANDLE_ALIAS);
 
@@ -2774,11 +2781,12 @@ static NTSTATUS dcesrv_samr_DeleteAliasMember(struct dcesrv_call_state *dce_call
 
 	mod->dn = talloc_reference(mem_ctx, a_state->account_dn);
 
-	if (samdb_msg_add_delval(d_state->sam_ctx, mem_ctx, mod, "member",
-				 memberdn) != 0)
+	ret = samdb_msg_add_delval(d_state->sam_ctx, mem_ctx, mod, "member",
+								 memberdn);
+	if (ret != LDB_SUCCESS)
 		return NT_STATUS_UNSUCCESSFUL;
 
-	if (ldb_modify(a_state->sam_ctx, mod) != 0)
+	if (ldb_modify(a_state->sam_ctx, mod) != LDB_SUCCESS)
 		return NT_STATUS_UNSUCCESSFUL;
 
 	return NT_STATUS_OK;
@@ -2947,7 +2955,7 @@ static NTSTATUS dcesrv_samr_DeleteUser(struct dcesrv_call_state *dce_call, TALLO
 	a_state = h->data;
 
 	ret = ldb_delete(a_state->sam_ctx, a_state->account_dn);
-	if (ret != 0) {
+	if (ret != LDB_SUCCESS) {
 		DEBUG(1, ("Failed to delete user: %s: %s\n", 
 			  ldb_dn_get_linearized(a_state->account_dn), 
 			  ldb_errstring(a_state->sam_ctx)));
@@ -3603,14 +3611,16 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
 	}
 
 	/* modify the samdb record */
-	ret = ldb_modify(a_state->sam_ctx, msg);
-	if (ret != 0) {
-		DEBUG(1,("Failed to modify record %s: %s\n",
-			 ldb_dn_get_linearized(a_state->account_dn),
-			 ldb_errstring(a_state->sam_ctx)));
-
-		/* we really need samdb.c to return NTSTATUS */
-		return NT_STATUS_UNSUCCESSFUL;
+	if (msg->num_elements > 0) {
+		ret = ldb_modify(a_state->sam_ctx, msg);
+		if (ret != LDB_SUCCESS) {
+			DEBUG(1,("Failed to modify record %s: %s\n",
+				 ldb_dn_get_linearized(a_state->account_dn),
+				 ldb_errstring(a_state->sam_ctx)));
+
+			/* we really need samdb.c to return NTSTATUS */
+			return NT_STATUS_UNSUCCESSFUL;
+		}
 	}
 
 	return NT_STATUS_OK;
@@ -4175,10 +4185,14 @@ static NTSTATUS dcesrv_samr_GetDomPwInfo(struct dcesrv_call_state *dce_call, TAL
 	ret = gendb_search_dn(sam_ctx, 
 			   mem_ctx, NULL, &msgs, attrs);
 	if (ret <= 0) {
+		talloc_free(sam_ctx);
+
 		return NT_STATUS_NO_SUCH_DOMAIN;
 	}
 	if (ret > 1) {
 		talloc_free(msgs);
+		talloc_free(sam_ctx);
+
 		return NT_STATUS_INTERNAL_DB_CORRUPTION;
 	}
 
@@ -4188,8 +4202,8 @@ static NTSTATUS dcesrv_samr_GetDomPwInfo(struct dcesrv_call_state *dce_call, TAL
 		"pwdProperties", 1);
 
 	talloc_free(msgs);
-
 	talloc_free(sam_ctx);
+
 	return NT_STATUS_OK;
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list