diff options
author | Volker Lendecke <vl@samba.org> | 2011-03-07 20:27:30 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2011-04-13 14:13:24 -0700 |
commit | 58e26c2589620f04684aed620054fde4cda98969 (patch) | |
tree | 404d366d84415fc5177478e4185c91f951a79dde /source3/winbindd | |
parent | d4c693df98835444d1db242b2723617d2e231c6a (diff) | |
download | samba-58e26c2589620f04684aed620054fde4cda98969.tar.gz samba-58e26c2589620f04684aed620054fde4cda98969.tar.bz2 samba-58e26c2589620f04684aed620054fde4cda98969.zip |
s3: Simplify parse_sidlist
Signed-off-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/winbindd')
-rw-r--r-- | source3/winbindd/winbindd_getsidaliases.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/source3/winbindd/winbindd_getsidaliases.c b/source3/winbindd/winbindd_getsidaliases.c index ebaaf4d2df..a90bfb31d4 100644 --- a/source3/winbindd/winbindd_getsidaliases.c +++ b/source3/winbindd/winbindd_getsidaliases.c @@ -159,38 +159,30 @@ NTSTATUS winbindd_getsidaliases_recv(struct tevent_req *req, static bool parse_sidlist(TALLOC_CTX *mem_ctx, const char *sidstr, struct dom_sid **sids, uint32_t *num_sids) { - const char *p, *q; + const char *p; 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) { + const char *q = NULL; + + if (!dom_sid_parse_endp(p, &sid, &q)) { + DEBUG(1, ("Could not parse sid %s\n", p)); 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 ((q == NULL) || (q[0] != '\n')) { + DEBUG(1, ("Got invalid sidstr: %s\n", p)); + return false; } if (!NT_STATUS_IS_OK(add_sid_to_array(mem_ctx, &sid, sids, num_sids))) { return False; } - p = q; + p = q+1; } return True; } |