summaryrefslogtreecommitdiff
path: root/source4/rpc_server
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2010-02-15 17:39:20 +1100
committerAndrew Tridgell <tridge@samba.org>2010-02-15 18:58:40 +1100
commit05425fcf14f0695e5e230a698885203cc7c7ab2b (patch)
tree64575f2e2795d6fb52e96d9154d13b887e9d4a6d /source4/rpc_server
parent2908f21c65ad8385f645cd841a25fe0f8f45feb0 (diff)
downloadsamba-05425fcf14f0695e5e230a698885203cc7c7ab2b.tar.gz
samba-05425fcf14f0695e5e230a698885203cc7c7ab2b.tar.bz2
samba-05425fcf14f0695e5e230a698885203cc7c7ab2b.zip
s4-drs: replace manual checks with dsdb_modify_permissive()
Much simpler to use the permissive control instead of manually munging the SPN list.
Diffstat (limited to 'source4/rpc_server')
-rw-r--r--source4/rpc_server/drsuapi/writespn.c33
1 files changed, 1 insertions, 32 deletions
diff --git a/source4/rpc_server/drsuapi/writespn.c b/source4/rpc_server/drsuapi/writespn.c
index 8e20c88fae..65a7183d11 100644
--- a/source4/rpc_server/drsuapi/writespn.c
+++ b/source4/rpc_server/drsuapi/writespn.c
@@ -47,9 +47,6 @@ WERROR dcesrv_drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALL
struct drsuapi_DsWriteAccountSpnRequest1 *req;
struct ldb_message *msg;
int count, i, ret;
- struct ldb_result *res;
- const char *attrs[] = { "servicePrincipalName", NULL };
- struct ldb_message_element *el;
unsigned spn_count=0;
req = &r->in.req->req1;
@@ -66,35 +63,8 @@ WERROR dcesrv_drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALL
return WERR_OK;
}
- /* load the existing SPNs, as these are
- * ignored for adds and deletes (see MS-DRSR
- * section 4.1.28.3)
- */
- ret = ldb_search(b_state->sam_ctx, msg, &res, msg->dn, LDB_SCOPE_BASE,
- attrs, NULL);
- if (ret != LDB_SUCCESS) {
- DEBUG(0,("Failed to load existing SPNs on %s: %s\n",
- ldb_dn_get_linearized(msg->dn),
- ldb_errstring(b_state->sam_ctx)));
- r->out.res->res1.status = WERR_DS_OBJ_NOT_FOUND;
- return WERR_OK;
- }
- el = ldb_msg_find_element(res->msgs[0], "servicePrincipalName");
-
/* construct mods */
for (i = 0; i < count; i++) {
- bool found = false;
- int j;
- for (j=0; el && j<el->num_values; j++) {
- if (samdb_ldb_val_case_cmp(req->spn_names[i].str, &el->values[j]) == 0) {
- found = true;
- break;
- }
- }
- if ((req->operation == DRSUAPI_DS_SPN_OPERATION_ADD && found) ||
- (req->operation == DRSUAPI_DS_SPN_OPERATION_DELETE && !found)) {
- continue;
- }
ret = samdb_msg_add_string(b_state->sam_ctx,
msg, msg, "servicePrincipalName",
req->spn_names[i].str);
@@ -125,8 +95,7 @@ WERROR dcesrv_drsuapi_DsWriteAccountSpn(struct dcesrv_call_state *dce_call, TALL
}
/* Apply to database */
-
- ret = ldb_modify(b_state->sam_ctx, msg);
+ ret = dsdb_modify_permissive(b_state->sam_ctx, msg);
if (ret != 0) {
DEBUG(0,("Failed to modify SPNs on %s: %s\n",
ldb_dn_get_linearized(msg->dn),