r12504: Fix one more transaction cancel bail-out path, and correct comments.
authorAndrew Bartlett <abartlet@samba.org>
Mon, 26 Dec 2005 23:47:19 +0000 (23:47 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:47:46 +0000 (13:47 -0500)
Andrew Bartlett
(This used to be commit 07b885d0c7b56f40f89955f6c49af49ac9085d74)

source4/rpc_server/samr/dcesrv_samr.c

index 7ff36c5d8203c7f7f015182ba964bfef84b44374..11d9bca06884ba3f70bf36e44fa1e9a882d951d0 100644 (file)
@@ -706,7 +706,9 @@ static NTSTATUS samr_EnumDomainGroups(struct dcesrv_call_state *dce_call, TALLOC
 /* 
   samr_CreateUser2 
 
-  TODO: This should do some form of locking, especially around the rid allocation
+  This call uses transactions to ensure we don't get a new conflicting
+  user while we are processing this, and to ensure the user either
+  completly exists, or does not.
 */
 static NTSTATUS samr_CreateUser2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
                                 struct samr_CreateUser2 *r)
@@ -771,7 +773,11 @@ static NTSTATUS samr_CreateUser2(struct dcesrv_call_state *dce_call, TALLOC_CTX
        }
 
        cn_name   = talloc_strdup(mem_ctx, account_name);
-       NT_STATUS_HAVE_NO_MEMORY(cn_name);
+       if (!cn_name) {
+               ldb_transaction_cancel(d_state->sam_ctx);
+               return NT_STATUS_NO_MEMORY;
+       }
+
        cn_name_len = strlen(cn_name);
 
        /* This must be one of these values *only* */