diff -Naur cyrus-imapd-2.2.10.orig/lib/auth_unix.c cyrus-imapd-2.2.10/lib/auth_unix.c --- cyrus-imapd-2.2.10.orig/lib/auth_unix.c Tue Sep 14 00:49:29 2004 +++ cyrus-imapd-2.2.10/lib/auth_unix.c Thu Dec 16 08:36:32 2004 @@ -48,6 +48,7 @@ #include #include #include +#include #include #include @@ -226,6 +227,10 @@ struct passwd *pwd; struct group *grp; char **mem; + FILE *groupcache; + char fnamebuf[1024]; + const char *config_dir = + libcyrus_config_getstring(CYRUSOPT_CONFIG_DIR); identifier = auth_canonifyid(identifier, 0); if (!identifier) return 0; @@ -242,8 +247,11 @@ pwd = getpwnam(identifier); + strcpy(fnamebuf, config_dir); + strcat(fnamebuf, "/group.cache"); + groupcache = fopen(fnamebuf, "r"); setgrent(); - while ((grp = getgrent())) { + while (grp = ( (groupcache) ? fgetgrent(groupcache) : getgrent() )) { for (mem = grp->gr_mem; *mem; mem++) { if (!strcmp(*mem, identifier)) break; } @@ -256,6 +264,7 @@ } } endgrent(); + if (groupcache) fclose(groupcache); return newstate; }