From 0a19617c9785425e3328f82d022930d3fa91e7b3 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 16 Nov 2010 16:11:14 +0100 Subject: s3: Move parse_sidlist to the only calling file --- source3/winbindd/winbindd_getsidaliases.c | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'source3/winbindd/winbindd_getsidaliases.c') diff --git a/source3/winbindd/winbindd_getsidaliases.c b/source3/winbindd/winbindd_getsidaliases.c index f01dac9c4c..ebaaf4d2df 100644 --- a/source3/winbindd/winbindd_getsidaliases.c +++ b/source3/winbindd/winbindd_getsidaliases.c @@ -27,6 +27,9 @@ struct winbindd_getsidaliases_state { uint32_t *aliases; }; +static bool parse_sidlist(TALLOC_CTX *mem_ctx, const char *sidstr, + struct dom_sid **sids, uint32_t *num_sids); + static void winbindd_getsidaliases_done(struct tevent_req *subreq); struct tevent_req *winbindd_getsidaliases_send(TALLOC_CTX *mem_ctx, @@ -152,3 +155,42 @@ NTSTATUS winbindd_getsidaliases_recv(struct tevent_req *req, response->data.num_entries = state->num_aliases; return NT_STATUS_OK; } + +static bool parse_sidlist(TALLOC_CTX *mem_ctx, const char *sidstr, + struct dom_sid **sids, uint32_t *num_sids) +{ + const char *p, *q; + + p = sidstr; + if (p == NULL) + return False; + + while (p[0] != '\0') { + fstring tmp; + size_t sidlen; + struct dom_sid sid; + q = strchr(p, '\n'); + if (q == NULL) { + DEBUG(0, ("Got invalid sidstr: %s\n", p)); + return False; + } + sidlen = PTR_DIFF(q, p); + if (sidlen >= sizeof(tmp)-1) { + return false; + } + memcpy(tmp, p, sidlen); + tmp[sidlen] = '\0'; + q += 1; + if (!string_to_sid(&sid, tmp)) { + DEBUG(0, ("Could not parse sid %s\n", p)); + return False; + } + if (!NT_STATUS_IS_OK(add_sid_to_array(mem_ctx, &sid, sids, + num_sids))) + { + return False; + } + p = q; + } + return True; +} -- cgit