From 426039bdd70a5502d56fbc2a9dcde5817b145c1c Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Sat, 21 Sep 2019 21:17:34 +0000 Subject: Add getgrouplist() support (stubbed in nsssd-nslcd) --- src/libnsss/nsss_grouplist_adjust.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/libnsss/nsss_grouplist_adjust.c (limited to 'src/libnsss/nsss_grouplist_adjust.c') diff --git a/src/libnsss/nsss_grouplist_adjust.c b/src/libnsss/nsss_grouplist_adjust.c new file mode 100644 index 0000000..fda4882 --- /dev/null +++ b/src/libnsss/nsss_grouplist_adjust.c @@ -0,0 +1,24 @@ +/* ISC license. */ + +#include +#include +#include + +#include +#include "nsss-internal.h" + +int nsss_grouplist_adjust (size_t n, size_t r, gid_t gid, gid_t *gids, int *ngids, int e) +{ + if (r > INT_MAX) return (errno = EMSGSIZE, -1) ; + if (r > n) return (*ngids = (int)r, errno = ENOBUFS, -1) ; + for (size_t i = 0 ; i < r ; i++) if (gid == gids[i]) goto ok ; + r++ ; + if (r > INT_MAX) return (errno = EMSGSIZE, -1) ; + if (r > n) return (*ngids = (int)r, errno = ENOBUFS, -1) ; + memmove(gids + 1, gids, (r-1) * sizeof(gid_t)) ; + gids[0] = gid ; + ok: + *ngids = (int)r ; + errno = e ; + return (int)n ; +} -- cgit v1.3.1