From: Andrew Tridgell Date: Wed, 5 Aug 2009 03:31:06 +0000 (+1000) Subject: fixed a uid_wrapper bug that caused a segv in the RAW-ACLS test X-Git-Tag: tevent-0.9.8~477 X-Git-Url: http://git.samba.org/samba.git/?p=ira%2Fwip.git;a=commitdiff_plain;h=d40537c92a9ad7535b90218f289c35f039d03b0c fixed a uid_wrapper bug that caused a segv in the RAW-ACLS test --- diff --git a/lib/uid_wrapper/uid_wrapper.c b/lib/uid_wrapper/uid_wrapper.c index 948ff65b352..f7f04316bfc 100644 --- a/lib/uid_wrapper/uid_wrapper.c +++ b/lib/uid_wrapper/uid_wrapper.c @@ -42,6 +42,10 @@ static void uwrap_init(void) uwrap.initialised = true; if (getenv("UID_WRAPPER")) { uwrap.enabled = true; + /* put us in one group */ + uwrap.ngroups = 1; + uwrap.groups = talloc_array(talloc_autofree_context(), gid_t, 1); + uwrap.groups[0] = 0; } } @@ -101,14 +105,17 @@ _PUBLIC_ int uwrap_setgroups(size_t size, const gid_t *list) talloc_free(uwrap.groups); uwrap.ngroups = 0; - - uwrap.groups = talloc_array(talloc_autofree_context(), gid_t, size); - if (uwrap.groups == NULL) { - errno = ENOMEM; - return -1; + uwrap.groups = NULL; + + if (size != 0) { + uwrap.groups = talloc_array(talloc_autofree_context(), gid_t, size); + if (uwrap.groups == NULL) { + errno = ENOMEM; + return -1; + } + memcpy(uwrap.groups, list, size*sizeof(gid_t)); + uwrap.ngroups = size; } - memcpy(uwrap.groups, list, size*sizeof(gid_t)); - uwrap.ngroups = size; return 0; } @@ -130,7 +137,7 @@ _PUBLIC_ int uwrap_getgroups(int size, gid_t *list) return -1; } memcpy(list, uwrap.groups, size*sizeof(gid_t)); - return 0; + return uwrap.ngroups; } _PUBLIC_ uid_t uwrap_getuid(void)