r17846: Ok, this is a patch that needs further discussion. On Solaris, snprintf seems
authorVolker Lendecke <vlendec@samba.org>
Sat, 26 Aug 2006 22:27:29 +0000 (22:27 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:16:48 +0000 (14:16 -0500)
to be broken. The %lu modifies apparently can not cope with the high
bit==1. In dom_sid_string I added some printfs and got:

auth: 21
auth: 2666793276
auth: 679821296
auth: 2310223117
auth: 1206
sid=S-1-5-21-8446744072081377596-679821296-8446744071724807437-1206

The "auth:" values are direct printfs, the sid= is the resulting code from
dom_sid_string.

I could not reproduce it with a simple test program, and #ifdef'ing out
HAVE_SNPRINTF in config.h manually does not help either, probably because the
dynamic linker overwrites the symbol in lib/replace.

Checking it in because it fixes the RPC-SAMBA3-SHARESEC test directly on host
"sunx", I would like to see whether it also fixes IRIX and AIX.

Volker
(This used to be commit 1a9401738f652a87d377a32086342f5f98525fc2)

source4/libcli/security/dom_sid.c

index 54242eb515172f7af812d115b4be4b56dcb0c7f2..90421104a71efbfa483b61340cc815d6fb4985c8 100644 (file)
@@ -285,7 +285,14 @@ char *dom_sid_string(TALLOC_CTX *mem_ctx, const struct dom_sid *sid)
                       (unsigned int)sid->sid_rev_num, (unsigned long)ia);
 
        for (i = 0; i < sid->num_auths; i++) {
-               ofs += snprintf(ret + ofs, maxlen - ofs, "-%lu", (unsigned long)sid->sub_auths[i]);
+                char *tmp = talloc_asprintf(mem_ctx, "%lu",
+                                           (unsigned long)sid->sub_auths[i]);
+                if (tmp == NULL) {
+                        talloc_free(ret);
+                        return NULL;
+                }
+                ofs += snprintf(ret + ofs, maxlen - ofs, "-%s", tmp);
+                talloc_free(tmp);
        }
        
        return ret;