> 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