cyrus-imapd/cyrus-imapd-2.2.10-groupcache.patch

44 lines
1.1 KiB
Diff
Raw Normal View History

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 <stdlib.h>
#include <pwd.h>
#include <grp.h>
+#include <stdio.h>
#include <ctype.h>
#include <string.h>
@@ -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;
}