]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:rpc_server: Add transaction for dcesrv_samr_SetUserInfo()
authorAndreas Schneider <asn@samba.org>
Tue, 26 Jul 2022 09:04:29 +0000 (11:04 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 28 Jul 2022 11:51:29 +0000 (11:51 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source4/rpc_server/samr/dcesrv_samr.c

index e7f0b0b869a73c660b79c7d926f921178e151c09..01fbca966ad15076cebec10c12d9614e459e131c 100644 (file)
@@ -3647,6 +3647,13 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
                return NT_STATUS_NO_MEMORY;
        }
 
+       ret = ldb_transaction_start(sam_ctx);
+       if (ret != LDB_SUCCESS) {
+               DBG_ERR("Failed to start a transaction: %s\n",
+                       ldb_errstring(sam_ctx));
+               return NT_STATUS_LOCK_NOT_GRANTED;
+       }
+
        switch (r->in.level) {
        case 2:
                SET_STRING(msg, info2.comment,          "comment");
@@ -4092,8 +4099,21 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL
                }
        }
 
+       ret = ldb_transaction_commit(sam_ctx);
+       if (ret != LDB_SUCCESS) {
+               DBG_ERR("Failed to commit transaction modifying account record "
+                       "%s: %s\n",
+                       ldb_dn_get_linearized(msg->dn),
+                       ldb_errstring(sam_ctx));
+               return NT_STATUS_INTERNAL_DB_CORRUPTION;
+       }
+
        status = NT_STATUS_OK;
 done:
+       if (!NT_STATUS_IS_OK(status)) {
+               ldb_transaction_cancel(sam_ctx);
+       }
+
        return status;
 }