diff --git a/networking/ftpd.c b/networking/ftpd.c index 4ecdb4121..6ca231c90 100644 --- a/networking/ftpd.c +++ b/networking/ftpd.c @@ -71,6 +71,10 @@ //usage: "\n -w Allow upload" //usage: IF_FEATURE_FTPD_AUTHENTICATION( //usage: "\n -A No login required, client access occurs under ftpd's UID" +// +// if !FTPD_AUTHENTICATION, -A is accepted too, but not shown in --help +// since it's the only supported mode in that configuration +// //usage: "\n -a USER Enable 'anonymous' login and map it to USER" //usage: ) //usage: "\n -v Log errors to stderr. -vv: verbose log" @@ -1157,14 +1161,12 @@ enum { #if !BB_MMU OPT_l = (1 << 0), OPT_1 = (1 << 1), - OPT_A = (1 << 2), #endif - BIT_v = (!BB_MMU) * 3, - OPT_v = (1 << (BIT_v + 0)), - OPT_S = (1 << (BIT_v + 1)), - OPT_w = (1 << (BIT_v + 2)) * ENABLE_FEATURE_FTPD_WRITE, - BIT_A = BIT_v + 2 + ENABLE_FEATURE_FTPD_WRITE, - OPT_A = (1 << (BIT_A + 0)) * ENABLE_FEATURE_FTPD_AUTHENTICATION, + BIT_A = (!BB_MMU) * 2, + OPT_A = (1 << (BIT_A + 0)), + OPT_v = (1 << (BIT_A + 1)), + OPT_S = (1 << (BIT_A + 2)), + OPT_w = (1 << (BIT_A + 3)) * ENABLE_FEATURE_FTPD_WRITE, }; int ftpd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; @@ -1184,26 +1186,25 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv) verbose_S = 0; G.timeout = 2 * 60; #if BB_MMU - opts = getopt32(argv, "^" "vS" - IF_FEATURE_FTPD_WRITE("w") IF_FEATURE_FTPD_AUTHENTICATION("A") + opts = getopt32(argv, "^" "AvS" IF_FEATURE_FTPD_WRITE("w") "t:+T:+" IF_FEATURE_FTPD_AUTHENTICATION("a:") "\0" "vv:SS", &G.timeout, &abs_timeout, IF_FEATURE_FTPD_AUTHENTICATION(&anon_opt,) &G.verbose, &verbose_S ); #else - opts = getopt32(argv, "^" "l1AvS" - IF_FEATURE_FTPD_WRITE("w") IF_FEATURE_FTPD_AUTHENTICATION("A") + opts = getopt32(argv, "^" "l1AvS" IF_FEATURE_FTPD_WRITE("w") "t:+T:+" IF_FEATURE_FTPD_AUTHENTICATION("a:") "\0" "vv:SS", &G.timeout, &abs_timeout, IF_FEATURE_FTPD_AUTHENTICATION(&anon_opt,) &G.verbose, &verbose_S ); if (opts & (OPT_l|OPT_1)) { - /* Our secret backdoor to ls */ + /* Our secret backdoor to ls: see popen_ls() */ if (fchdir(3) != 0) _exit(127); /* memset(&G, 0, sizeof(G)); - ls_main does it */ + /* NB: in this case -A has a different meaning: like "ls -A" */ return ls_main(/*argc_unused*/ 0, argv); } #endif