From d40537c92a9ad7535b90218f289c35f039d03b0c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 5 Aug 2009 13:31:06 +1000 Subject: fixed a uid_wrapper bug that caused a segv in the RAW-ACLS test --- lib/uid_wrapper/uid_wrapper.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'lib/uid_wrapper') diff --git a/lib/uid_wrapper/uid_wrapper.c b/lib/uid_wrapper/uid_wrapper.c index 948ff65b35..f7f04316bf 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) -- cgit