> 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