Index: ftpcmd.y =================================================================== RCS file: /home/ncvs/src/libexec/ftpd/ftpcmd.y,v retrieving revision 1.26 diff -u -r1.26 ftpcmd.y --- ftpcmd.y 2001/04/28 07:55:19 1.26 +++ ftpcmd.y 2001/08/28 09:45:28 @@ -93,6 +93,7 @@ extern char tmpline[]; extern int readonly; extern int noepsv; +extern int noretr; off_t restart_point; @@ -439,8 +440,11 @@ } | RETR check_login SP pathname CRLF { - if ($2 && $4 != NULL) + if (noretr) + reply(500, "RETR command is disabled"); + else if ($2 && $4 != NULL) retrieve((char *) 0, $4); + if ($4 != NULL) free($4); } Index: ftpd.8 =================================================================== RCS file: /home/ncvs/src/libexec/ftpd/ftpd.8,v retrieving revision 1.41 diff -u -r1.41 ftpd.8 --- ftpd.8 2001/07/15 07:53:38 1.41 +++ ftpd.8 2001/08/28 09:47:40 @@ -50,6 +50,7 @@ .Op Fl S .Op Fl U .Op Fl r +.Op Fl o .Op Fl E .Op Fl T Ar maxtimeout .Op Fl t Ar timeout @@ -157,6 +158,9 @@ .It Fl r Put server in read-only mode. All commands which may modify the local filesystem are disabled. +.It Fl o +Put server in write-only mode. +RETR is disabled, preventing downloads. .It Fl E Disable the EPSV command. This is useful for servers behind older firewalls. Index: ftpd.c =================================================================== RCS file: /home/ncvs/src/libexec/ftpd/ftpd.c,v retrieving revision 1.79 diff -u -r1.79 ftpd.c --- ftpd.c 2001/07/29 00:52:36 1.79 +++ ftpd.c 2001/08/28 09:43:50 @@ -149,6 +149,8 @@ int pdata = -1; /* for passive mode */ int readonly=0; /* Server is in readonly mode. */ int noepsv=0; /* EPSV command is disabled. */ +int noretr=0; /* RETR command is disabled. */ + sig_atomic_t transflag; off_t file_size; off_t byte_count; @@ -299,7 +301,7 @@ #endif /* OLD_SETPROCTITLE */ - while ((ch = getopt(argc, argv, "AdlDESURrt:T:u:va:p:46")) != -1) { + while ((ch = getopt(argc, argv, "AdlDESURrt:T:u:voa:p:46")) != -1) { switch (ch) { case 'D': daemon_mode++; @@ -380,6 +382,10 @@ case '6': family = AF_INET6; + break; + + case 'o': + noretr = 1; break; default: