Hi,

cyrus imapd is completly independent of unix accounts and therefor does not 
depend on /etc/passwd.

I think beeing dependent on /etc/group is not nice either and therefor this 
little patch in the attachment.

Also in order to get sieve working correctly the following trivial change is 
required:
--- timsieved/lex.c.orig        2002-10-04 23:58:36.000000000 +0200
+++ timsieved/lex.c     2002-10-04 23:59:09.000000000 +0200
@@ -322,6 +322,7 @@
       if (isdigit((unsigned char) ch)) {
        lexer_state=LEXER_STATE_NUMBER;
        tmpnum = ch -'0';
+        break;
       }
       switch (ch) {
       case '(':


Regards,
--martin
--
Dipl.-Phys. Martin Konold
e r f r a k o n
Erlewein, Frank, Konold & Partner - Beratende Ingenieure und Physiker
Germanenstrasse 15, 70563 Stuttgart, Germany
email: [EMAIL PROTECTED]
--- lib/auth_unix.c	Thu Oct 10 16:38:26 2002
+++ lib/auth_unix.c	Thu Oct 10 17:48:04 2002
@@ -48,6 +48,7 @@
 #include <stdlib.h>
 #include <pwd.h>
 #include <grp.h>
+#include <stdio.h>
 #include <ctype.h>
 #include <string.h>
 
@@ -143,6 +144,26 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 };
 
+
+static struct group* fgetgrnam(const char* name)
+{
+    struct group *grp;
+    FILE *groupfile;
+
+    groupfile = fopen("/etc/imapd.group","r");
+    if (!groupfile) groupfile = fopen("/etc/group", "r");
+    if (groupfile) {
+       while ((grp = fgetgrent(groupfile))) {
+         if (strcmp(grp->gr_name, name) == 0) {
+           fclose(groupfile);
+           return grp;
+         }
+       }
+    } 
+    if (groupfile) fclose(groupfile);
+    return NULL;
+} 
+
 /*
  * Convert 'identifier' into canonical form.
  * Returns a pointer to a static buffer containing the canonical form
@@ -185,7 +206,7 @@
      */
     
     if (!strncmp(retbuf, "group:", 6)) {
-	grp = getgrnam(retbuf+6);
+	grp = fgetgrnam(retbuf+6);
 	if (!grp) return 0;
 	strcpy(retbuf+6, grp->gr_name);
 	return retbuf;
@@ -228,6 +249,7 @@
     struct passwd *pwd;
     struct group *grp;
     char **mem;
+    FILE *groupfile;
 
     identifier = auth_canonifyid(identifier, 0);
     if (!identifier) return 0;
@@ -241,20 +263,23 @@
     newstate->ngroups = 0;
     newstate->group = (char **) 0;
 
-    setgrent();
-    while ((grp = getgrent())) {
-	for (mem = grp->gr_mem; *mem; mem++) {
-	    if (!strcmp(*mem, identifier)) break;
-	}
-
-	if (*mem || (pwd && pwd->pw_gid == grp->gr_gid)) {
-	    newstate->ngroups++;
-	    newstate->group = (char **)xrealloc((char *)newstate->group,
-						newstate->ngroups * sizeof(char *));
-	    newstate->group[newstate->ngroups-1] = xstrdup(grp->gr_name);
-	}
-    }
-    endgrent();
+    groupfile = fopen("/etc/imapd.group", "r");
+    if (!groupfile) groupfile = fopen("/etc/group","r");
+    if (groupfile) {
+       while ((grp = fgetgrent(groupfile))) {
+         for (mem = grp->gr_mem; *mem; mem++) {
+            if (!strcmp(*mem, identifier)) break;
+         }
+
+         if (*mem || (pwd && pwd->pw_gid == grp->gr_gid)) {
+            newstate->ngroups++;
+            newstate->group = (char **)xrealloc((char *)newstate->group,
+                                                newstate->ngroups * sizeof(char *));
+            newstate->group[newstate->ngroups-1] = xstrdup(grp->gr_name);
+         }
+       }
+       fclose(groupfile);
+    } 
     return newstate;
 }
 

Reply via email to