s3: Simplify parse_sidlist
authorVolker Lendecke <vl@samba.org>
Mon, 7 Mar 2011 19:27:30 +0000 (20:27 +0100)
committerJeremy Allison <jra@samba.org>
Wed, 13 Apr 2011 21:13:24 +0000 (14:13 -0700)
Signed-off-by: Jeremy Allison <jra@samba.org>
source3/winbindd/winbindd_getsidaliases.c

index ebaaf4d2df71cdf7f2b7597e2efed17c742dd9f1..a90bfb31d43b9b8d4cb1fc0c23bc41c388022c71 100644 (file)
@@ -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;
 }