From 40a7466516d51fe187b5422e27e3e71795ba830e Mon Sep 17 00:00:00 2001 From: sgunderson Date: Fri, 23 Feb 2001 14:23:51 +0000 Subject: [PATCH] BetaFTPD now switches group ID properly, not just user ID (also fixed a microscopic possible problem if the real user ID wasn't 0, but some other weird powerful user). Thanks to Spider for pointing this out. --- cmds.c | 12 ++++++++++-- ftpd.h | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/cmds.c b/cmds.c index 500d6c2..255b293 100644 --- a/cmds.c +++ b/cmds.c @@ -305,6 +305,7 @@ int cmd_pass(struct conn * const c) 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; } @@ -406,10 +407,12 @@ int cmd_port(struct conn * const c) #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; @@ -1602,8 +1605,10 @@ void parse_command(struct conn *c) #if !WANT_NONROOT if (h->do_setuid) { seteuid(c->uid); + setegid(c->gid); } else { - seteuid(0); + seteuid(getuid()); + setegid(getgid()); } #endif @@ -1621,7 +1626,10 @@ void parse_command(struct conn *c) 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); } diff --git a/ftpd.h b/ftpd.h index 66df39a..b54c43b 100644 --- a/ftpd.h +++ b/ftpd.h @@ -117,6 +117,8 @@ struct conn { char username[17]; uid_t uid; + gid_t gid; + char root_dir[256]; char curr_dir[256]; -- 2.39.2