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;
}
}
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;
}
return -1;
}
memcpy(list, uwrap.groups, size*sizeof(gid_t));
- return 0;
+ return uwrap.ngroups;
}
_PUBLIC_ uid_t uwrap_getuid(void)