X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=nss%2Fgr.c;h=544cc9d911ade8cbb85ca9b4f673ce1419f58677;hb=5b9652f1dff167791209584273e181f932ea93b5;hp=db822094990c34044f6533c0f564ed9be90d36b6;hpb=c42f577140459f548b1d7b085cd4dc2717e060c6;p=nsscash%2Fnsscash.git diff --git a/nss/gr.c b/nss/gr.c index db82209..544cc9d 100644 --- a/nss/gr.c +++ b/nss/gr.c @@ -32,6 +32,8 @@ // NOTE: This file is very similar to pw.c, keep in sync! +// TODO: adapt offsets to 32 bit to fit more than 5000 users per group (for 9 +// byte user names) struct group_entry { uint64_t gid; @@ -89,24 +91,23 @@ static struct file static_file = { }; static pthread_mutex_t static_file_lock = PTHREAD_MUTEX_INITIALIZER; -enum nss_status _nss_cash_setgrent(int x) { - (void)x; - +static void internal_unmap_static_file(void) { pthread_mutex_lock(&static_file_lock); - // Unmap is necessary to detect changes when the file was replaced on - // disk unmap_file(&static_file); - // getgrent_r will open the file if necessary when called pthread_mutex_unlock(&static_file_lock); +} +enum nss_status _nss_cash_setgrent(int x) { + (void)x; + + // Unmap is necessary to detect changes when the file was replaced on + // disk; getgrent_r will open the file if necessary when called + internal_unmap_static_file(); return NSS_STATUS_SUCCESS; } enum nss_status _nss_cash_endgrent(void) { - pthread_mutex_lock(&static_file_lock); - unmap_file(&static_file); - pthread_mutex_unlock(&static_file_lock); - + internal_unmap_static_file(); return NSS_STATUS_SUCCESS; } @@ -179,9 +180,8 @@ static enum nss_status internal_getgr(struct search_key *key, struct group *resu } enum nss_status _nss_cash_getgrgid_r(gid_t gid, struct group *result, char *buffer, size_t buflen, int *errnop) { - uint64_t id = (uint64_t)gid; struct search_key key = { - .id = &id, + .id = (uint64_t)gid, .offset = offsetof(struct group_entry, gid), }; return internal_getgr(&key, result, buffer, buflen, errnop);