From 7c5f0a5212127b70486159af80e24fd96262ec88 Mon Sep 17 00:00:00 2001 From: Josiah Worcester Date: Sat, 7 Feb 2015 15:40:46 -0600 Subject: refactor group file access code this allows getgrnam and getgrgid to share code with the _r versions in preparation for alternate backend support. --- src/passwd/getgr_a.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/passwd/getgr_a.c (limited to 'src/passwd/getgr_a.c') diff --git a/src/passwd/getgr_a.c b/src/passwd/getgr_a.c new file mode 100644 index 00000000..805e28c9 --- /dev/null +++ b/src/passwd/getgr_a.c @@ -0,0 +1,32 @@ +#include +#include "pwf.h" + +int __getgr_a(const char *name, gid_t gid, struct group *gr, char **buf, size_t *size, char ***mem, size_t *nmem, struct group **res) +{ + FILE *f; + int rv = 0; + int cs; + + *res = 0; + + pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); + + f = fopen("/etc/group", "rbe"); + if (!f) { + rv = errno; + goto done; + } + + while (!(rv = __getgrent_a(f, gr, buf, size, mem, nmem, res)) && *res) { + if (name && !strcmp(name, (*res)->gr_name) + || !name && (*res)->gr_gid == gid) { + break; + } + } + fclose(f); + +done: + pthread_setcancelstate(cs, 0); + if (rv) errno = rv; + return rv; +} -- cgit v1.2.1