diff options
-rw-r--r-- | source3/lib/netapi/group.c | 2 | ||||
-rw-r--r-- | source3/libsmb/clispnego.c | 4 | ||||
-rw-r--r-- | source3/rpc_server/srv_samr_nt.c | 2 | ||||
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/linked_attributes.c | 10 | ||||
-rw-r--r-- | source4/torture/rpc/dssync.c | 2 |
5 files changed, 15 insertions, 5 deletions
diff --git a/source3/lib/netapi/group.c b/source3/lib/netapi/group.c index 8dba4b8838..95c012a7f6 100644 --- a/source3/lib/netapi/group.c +++ b/source3/lib/netapi/group.c @@ -1243,7 +1243,7 @@ WERROR NetGroupEnum_r(struct libnetapi_ctx *ctx, goto done; } - if (r->out.resume_handle) { + if (r->out.resume_handle && info.info3.count > 0) { *r->out.resume_handle = info.info3.entries[info.info3.count-1].idx; } diff --git a/source3/libsmb/clispnego.c b/source3/libsmb/clispnego.c index fd312a4c0a..fb95d71925 100644 --- a/source3/libsmb/clispnego.c +++ b/source3/libsmb/clispnego.c @@ -152,7 +152,7 @@ bool spnego_parse_negTokenInit(DATA_BLOB blob, for (i=0; asn1_tag_remaining(data) > 0 && i < ASN1_MAX_OIDS-1; i++) { const char *oid_str = NULL; asn1_read_OID(data,NULL,&oid_str); - OIDs[i] = oid_str; + OIDs[i] = CONST_DISCARD(char *, oid_str); } OIDs[i] = NULL; asn1_end_tag(data); @@ -257,7 +257,7 @@ bool parse_negTokenTarg(DATA_BLOB blob, char *OIDs[ASN1_MAX_OIDS], DATA_BLOB *se for (i=0; asn1_tag_remaining(data) > 0 && i < ASN1_MAX_OIDS-1; i++) { const char *oid_str = NULL; asn1_read_OID(data,NULL,&oid_str); - OIDs[i] = oid_str; + OIDs[i] = CONST_DISCARD(char *, oid_str); } OIDs[i] = NULL; asn1_end_tag(data); diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c index d08bb50bb9..36be832a75 100644 --- a/source3/rpc_server/srv_samr_nt.c +++ b/source3/rpc_server/srv_samr_nt.c @@ -4908,6 +4908,8 @@ NTSTATUS _samr_DeleteUser(pipes_struct *p, if (!close_policy_hnd(p, r->in.user_handle)) return NT_STATUS_OBJECT_NAME_INVALID; + ZERO_STRUCTP(r->out.user_handle); + force_flush_samr_cache(disp_info); return NT_STATUS_OK; diff --git a/source4/dsdb/samdb/ldb_modules/linked_attributes.c b/source4/dsdb/samdb/ldb_modules/linked_attributes.c index 14fd107d81..190a66cdb3 100644 --- a/source4/dsdb/samdb/ldb_modules/linked_attributes.c +++ b/source4/dsdb/samdb/ldb_modules/linked_attributes.c @@ -466,6 +466,9 @@ static int linked_attributes_modify(struct ldb_module *module, struct ldb_reques } } } else { + /* Flag that there was a DELETE + * without a value specified, so we + * need to look for the old value */ store_el = true; } @@ -475,6 +478,7 @@ static int linked_attributes_modify(struct ldb_module *module, struct ldb_reques if (store_el) { struct ldb_message_element *search_el; + /* Fill out ac->rc only if we have to find the old values */ if (!ac->rc) { ac->rc = talloc_zero(ac, struct replace_context); if (!ac->rc) { @@ -499,6 +503,9 @@ static int linked_attributes_modify(struct ldb_module *module, struct ldb_reques /* both replace and delete without values are handled in the callback * after the search on the entry to be modified is performed */ + + /* Only bother doing a search of this entry (to find old + * values) if replace or delete operations are attempted */ if (ac->rc) { const char **attrs; @@ -527,9 +534,10 @@ static int linked_attributes_modify(struct ldb_module *module, struct ldb_reques ret = ldb_next_request(module, search_req); } + } else { if (ac->ops) { - /* start the mod requests chain */ + /* Jump directly to handling the modifies */ ret = la_do_mod_request(ac); } else { /* nothing to do for this module, proceed */ diff --git a/source4/torture/rpc/dssync.c b/source4/torture/rpc/dssync.c index bee2658816..847b32827b 100644 --- a/source4/torture/rpc/dssync.c +++ b/source4/torture/rpc/dssync.c @@ -825,7 +825,7 @@ static bool test_FetchNT4Data(struct torture_context *tctx, struct drsuapi_DsGetNT4ChangeLog r; union drsuapi_DsGetNT4ChangeLogRequest req; union drsuapi_DsGetNT4ChangeLogInfo info; - int32_t level_out = 0; + uint32_t level_out = 0; struct GUID null_guid; struct dom_sid null_sid; DATA_BLOB cookie; |