summaryrefslogtreecommitdiff
path: root/source3/winbindd/winbindd_getsidaliases.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2010-11-16 16:11:14 +0100
committerVolker Lendecke <vl@samba.org>2010-11-17 12:17:21 +0100
commit0a19617c9785425e3328f82d022930d3fa91e7b3 (patch)
tree951b485de5220f22ba844d5eae07679ba40e36bf /source3/winbindd/winbindd_getsidaliases.c
parent705d93d2ad3fffbe69fe19d521631bf6e249e4f1 (diff)
downloadsamba-0a19617c9785425e3328f82d022930d3fa91e7b3.tar.gz
samba-0a19617c9785425e3328f82d022930d3fa91e7b3.tar.bz2
samba-0a19617c9785425e3328f82d022930d3fa91e7b3.zip
s3: Move parse_sidlist to the only calling file
Diffstat (limited to 'source3/winbindd/winbindd_getsidaliases.c')
-rw-r--r--source3/winbindd/winbindd_getsidaliases.c42
1 files changed, 42 insertions, 0 deletions
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;
+}