Applied, thanks.
On Fri, Jan 6, 2017 at 11:01 PM, Andrey Mozzhuhin <[email protected]> wrote: > Anonymous ftpd logins is usefull even when ftpd authentication feature > is enabled. Anonymous logins provide simple password-less connection > for FTP clients. > > To allow password-less connection user command line option '-a USER' is > added. This option allow specifying the system user to use when > 'anonymous' username is provided in USER command. > > Signed-off-by: Andrey Mozzhuhin <[email protected]> > --- > networking/ftpd.c | 26 ++++++++++++++++++-------- > 1 file changed, 18 insertions(+), 8 deletions(-) > > diff --git a/networking/ftpd.c b/networking/ftpd.c > index bcd60a2..7dd2242 100644 > --- a/networking/ftpd.c > +++ b/networking/ftpd.c > @@ -47,7 +47,9 @@ > //kbuild:lib-$(CONFIG_FTPD) += ftpd.o > > //usage:#define ftpd_trivial_usage > -//usage: "[-wvS] [-t N] [-T N] [DIR]" > +//usage: "[-wvS]" > +//usage: IF_FEATURE_FTPD_AUTHENTICATION(" [-a USER]") > +//usage: " [-t N] [-T N] [DIR]" > //usage:#define ftpd_full_usage "\n\n" > //usage: "Anonymous FTP server\n" > //usage: "\n" > @@ -59,6 +61,8 @@ > //usage: "\n -w Allow upload" > //usage: "\n -v Log errors to stderr. -vv: verbose log" > //usage: "\n -S Log errors to syslog. -SS: verbose log" > +//usage: IF_FEATURE_FTPD_AUTHENTICATION( > +//usage: "\n -a USER User for anonymous logins") > //usage: "\n -t,-T Idle and absolute timeouts" > //usage: "\n DIR Change root to this directory" > > @@ -1154,6 +1158,8 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv) > { > #if ENABLE_FEATURE_FTPD_AUTHENTICATION > struct passwd *pw = NULL; > + char *anonymous_user = NULL; > + int is_anonymous = 0; > #endif > unsigned abs_timeout; > unsigned verbose_S; > @@ -1165,10 +1171,13 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv) > verbose_S = 0; > G.timeout = 2 * 60; > opt_complementary = "vv:SS"; > -#if BB_MMU > - opts = getopt32(argv, "vS" IF_FEATURE_FTPD_WRITE("w") "t:+T:+", > &G.timeout, &abs_timeout, &G.verbose, &verbose_S); > -#else > - opts = getopt32(argv, "l1AvS" IF_FEATURE_FTPD_WRITE("w") "t:+T:+", > &G.timeout, &abs_timeout, &G.verbose, &verbose_S); > + opts = getopt32(argv, USE_FOR_NOMMU("l1A") "vS" > IF_FEATURE_FTPD_WRITE("w") > + "t:+T:+" > + IF_FEATURE_FTPD_AUTHENTICATION("a:"), > + &G.timeout, &abs_timeout, > + IF_FEATURE_FTPD_AUTHENTICATION(&anonymous_user,) > + &G.verbose, &verbose_S); > +#if !BB_MMU > if (opts & (OPT_l|OPT_1)) { > /* Our secret backdoor to ls */ > /* TODO: pass --group-directories-first? would be nice, but ls doesn't do > that yet */ > @@ -1234,11 +1243,12 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv) > #if ENABLE_FEATURE_FTPD_AUTHENTICATION > while (1) { > uint32_t cmdval = cmdio_get_cmd_and_arg(); > - if (cmdval == const_USER) { > - pw = getpwnam(G.ftp_arg); > + if (cmdval == const_USER) { > + is_anonymous = anonymous_user && !strcmp(G.ftp_arg, > "anonymous"); > + pw = is_anonymous ? getpwnam(anonymous_user) : > getpwnam(G.ftp_arg); > cmdio_write_raw(STR(FTP_GIVEPWORD)" Please specify > password\r\n"); > } else if (cmdval == const_PASS) { > - if (check_password(pw, G.ftp_arg) > 0) { > + if (is_anonymous || check_password(pw, G.ftp_arg) > > 0) { > break; /* login success */ > } > cmdio_write_raw(STR(FTP_LOGINERR)" Login > failed\r\n"); > -- > 2.7.4 > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
