Use dom_sid_string for sid_string_talloc
authorVolker Lendecke <vl@samba.org>
Sat, 15 Dec 2007 21:33:52 +0000 (22:33 +0100)
committerVolker Lendecke <vl@samba.org>
Sat, 15 Dec 2007 21:33:52 +0000 (22:33 +0100)
Remove some code duplication, but introduce one more dependency on librpc/ndr.
Easily turned around so that librpc/ndr depends on lib/util_sid if necessary

source/lib/util_sid.c
source/librpc/ndr/sid.c

index b28626cd66fdb7a7a2c0654a253ec9c129014e76..868ac36d11a23d4efa352faa58ed44a2a97de548 100644 (file)
@@ -174,40 +174,23 @@ const char *get_global_sam_name(void)
 
 char *sid_to_string(fstring sidstr_out, const DOM_SID *sid)
 {
-       char subauth[16];
-       int i;
-       uint32 ia;
-  
-       if (!sid) {
-               fstrcpy(sidstr_out, "(NULL SID)");
-               return sidstr_out;
-       }
-
-       /*
-        * BIG NOTE: this function only does SIDS where the identauth is not >= 2^32 
-        * in a range of 2^48.
-        */
-       ia = (sid->id_auth[5]) +
-               (sid->id_auth[4] << 8 ) +
-               (sid->id_auth[3] << 16) +
-               (sid->id_auth[2] << 24);
-
-       slprintf(sidstr_out, sizeof(fstring) - 1, "S-%u-%lu", (unsigned int)sid->sid_rev_num, (unsigned long)ia);
-
-       for (i = 0; i < sid->num_auths; i++) {
-               slprintf(subauth, sizeof(subauth)-1, "-%lu", (unsigned long)sid->sub_auths[i]);
-               fstrcat(sidstr_out, subauth);
-       }
-
+       char *str = sid_string_talloc(talloc_tos(), sid);
+       fstrcpy(sidstr_out, str);
+       TALLOC_FREE(str);
        return sidstr_out;
 }
 
+/*****************************************************************
+ Essentially a renamed dom_sid_string from librpc/ndr with a
+ panic if it didn't work
+
+ This introduces a dependency on librpc/ndr/sid.o which can easily
+ be turned around if necessary
+*****************************************************************/
+
 char *sid_string_talloc(TALLOC_CTX *mem_ctx, const DOM_SID *sid)
 {
-       fstring sid_str;
-       char *result;
-       sid_to_string(sid_str, sid);
-       result = talloc_strdup(mem_ctx, sid_str);
+       char *result = dom_sid_string(mem_ctx, sid);
        SMB_ASSERT(result != NULL);
        return result;
 }
index b621f2485bbffab8a3d14644e69d7f0c31283f4b..89ab2b8ea50557c3304692cc85a523cd2a8f4bba 100644 (file)
@@ -75,6 +75,11 @@ char *dom_sid_string(TALLOC_CTX *mem_ctx, const struct dom_sid *sid)
        ret = (char *)talloc_size(mem_ctx, maxlen);
        if (!ret) return talloc_strdup(mem_ctx, "(SID ERR)");
 
+       /*
+        * BIG NOTE: this function only does SIDS where the identauth is not
+        * >= ^32 in a range of 2^48.
+        */
+
        ia = (sid->id_auth[5]) +
                (sid->id_auth[4] << 8 ) +
                (sid->id_auth[3] << 16) +