s4-drs: fixed a crash in writspn
authorAndrew Tridgell <tridge@samba.org>
Sat, 13 Nov 2010 08:08:45 +0000 (19:08 +1100)
committerAndrew Tridgell <tridge@samba.org>
Sat, 13 Nov 2010 08:52:53 +0000 (08:52 +0000)
sam_ctx_system may be NULL for non-privileged users

Autobuild-User: Andrew Tridgell <tridge@samba.org>
Autobuild-Date: Sat Nov 13 08:52:53 UTC 2010 on sn-devel-104

source4/rpc_server/drsuapi/writespn.c

index 23b06260754d76f9b8c391444bb4b96dbbfedc19..320232dcf91d88af1d974c0c66f1b9fdd1a1da8f 100644 (file)
@@ -160,6 +160,7 @@ WERROR dcesrv_drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALL
                        int ret;
                        unsigned spn_count=0;
                        bool passed_checks = true;
+                       struct ldb_context *sam_ctx;
 
                        req = &r->in.req->req1;
                        count = req->count;
@@ -215,9 +216,14 @@ WERROR dcesrv_drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALL
                                }
                        }
 
+                       if (passed_checks && b_state->sam_ctx_system) {
+                               sam_ctx = b_state->sam_ctx_system;
+                       } else {
+                               sam_ctx = b_state->sam_ctx;
+                       }
+
                        /* Apply to database */
-                       ret = dsdb_modify(passed_checks?b_state->sam_ctx_system:b_state->sam_ctx,
-                                         msg, DSDB_MODIFY_PERMISSIVE);
+                       ret = dsdb_modify(sam_ctx, msg, DSDB_MODIFY_PERMISSIVE);
                        if (ret != LDB_SUCCESS) {
                                DEBUG(0,("Failed to modify SPNs on %s: %s\n",
                                         ldb_dn_get_linearized(msg->dn),