c->auth = 0;
} else {
c->uid = p->pw_uid;
+ c->gid = p->pw_gid;
strncpy(c->curr_dir, p->pw_dir, 254);
c->curr_dir[254] = 0;
}
#if !WANT_NONROOT
/* need root privilegies for a short while */
seteuid(getuid());
+ setegid(getgid());
#endif
bind(sock, (struct sockaddr *)&sin, sizeof(sin));
#if !WANT_NONROOT
seteuid(c->uid);
+ setegid(c->gid);
#endif
f->sin.sin_family = AF_INET;
#if !WANT_NONROOT
if (h->do_setuid) {
seteuid(c->uid);
+ setegid(c->gid);
} else {
- seteuid(0);
+ seteuid(getuid());
+ setegid(getgid());
}
#endif
if (h->callback(c)) {
c->recv_buf[cmlen] = schar;
#if !WANT_NONROOT
- if (h->do_setuid) seteuid(getuid());
+ if (h->do_setuid) {
+ seteuid(getuid());
+ setegid(getgid());
+ }
#endif
remove_bytes(c, cmlen);
}