Date: Tue, 12 Oct 1999 13:20:57 +0200 From: Sheldon Hearn <sheldonh@uunet.co.za> To: Huidae Cho <hdcho@unix.knu.ac.kr> Cc: freebsd-questions@FreeBSD.ORG Subject: Re: FTP incoming Message-ID: <97822.939727257@axl.noc.iafrica.com> In-Reply-To: Your message of "Tue, 12 Oct 1999 14:59:37 %2B0900." <199910120559.OAA17721@unix.knu.ac.kr>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 12 Oct 1999 14:59:37 +0900, Huidae Cho wrote: > i want to prevent anonymous users from removing files in incoming dir. > > i set sticky bit to incoming dir. however, it didn't work at all. > > how can i do? You should get away with this untested diff. :-) Ciao, Sheldon. PS: The diff may not apply cleanly to your sources, because you didn't tell us which version of FreeBSD you're using. Index: ftpd.c =================================================================== RCS file: /home/ncvs/src/libexec/ftpd/ftpd.c,v retrieving revision 1.59 diff -u -d -5 -r1.59 ftpd.c --- ftpd.c 1999/09/19 22:05:29 1.59 +++ ftpd.c 1999/10/12 11:19:19 @@ -1912,12 +1912,39 @@ void delete(name) char *name; { struct stat st; + char *dir, *p; + int l; LOGCMD("delete", name); + if (guest) { + p = strrchr(name, '/'); + if (p == NULL) { + dir = "."; + } else if (p == name) { + dir = "/"; + } else if (p == name + strlen(name) - 1) { + dir = NULL; + } else { + l = p - name + 1; + dir = (char *)malloc(l + 1); + strncpy(dir, name, l); + dir[l] = '\0'; + } + if (dir != NULL) { + if (stat(dir, &st) < 0) { + perror_reply(550, dir); + return; + } else if (st.st_mode&S_ISVTX) { + errno = EPERM; + perror_reply(550, name); + return; + } + } + } if (stat(name, &st) < 0) { perror_reply(550, name); return; } if ((st.st_mode&S_IFMT) == S_IFDIR) { To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?97822.939727257>