> I suggest something getting the service name and skipping the initgroups
> call if it is pop, e.g.:
> 
> long loginpw (struct passwd *pw,int argc,char *argv[])
> {
>   uid_t uid = pw->pw_uid;
>   char *name = cpystr (pw->pw_name);
>   char *service = (char *) mail_parameters (NIL,GET_SERVICENAME,NIL);
>   long ret = !(setgid (pw->pw_gid) ||
>              (strcmp (service,"pop") ? initgroups (name,pw->pw_gid) : T) ||
>              setuid (uid));
>   fs_give ((void **) &name);
>   return ret;
> }

Thanks Mark.  That was almost it.  This appears to work for me:

--- ./src/osdep/unix/log_std.c~ 2000-10-24 19:40:53.000000000 -0400
+++ ./src/osdep/unix/log_std.c  2003-09-30 22:29:26.340847000 -0400
@@ -29,7 +29,9 @@
 {
   uid_t uid = pw->pw_uid;
   char *name = cpystr (pw->pw_name);
-  long ret = !(setgid (pw->pw_gid) || initgroups (name,pw->pw_gid) ||
+  char *service = (char *) mail_parameters (NIL,GET_SERVICENAME,NIL);
+  long ret = !(setgid (pw->pw_gid) ||
+              (strcmp (service,"pop") ? initgroups (name,pw->pw_gid) : NIL) ||
               setuid (uid));
   fs_give ((void **) &name);
   return ret;


Steve

Reply via email to