ftpd: make LIST command show dotfiles too
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 15 Sep 2014 21:35:58 +0000 (23:35 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 15 Sep 2014 21:35:58 +0000 (23:35 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/ftpd.c

index 9fcc3e9637c71165418f2ee80a5970376e6e7d02..6adcb1dee0cfcfdfba4890666c483e899e6917e2 100644 (file)
@@ -622,7 +622,7 @@ popen_ls(const char *opt)
        pid_t pid;
 
        argv[0] = "ftpd";
-       argv[1] = opt; /* "-l" or "-1" */
+       argv[1] = opt; /* "-lA" or "-1A" */
        argv[2] = "--";
        argv[3] = G.ftp_arg;
        argv[4] = NULL;
@@ -699,7 +699,7 @@ handle_dir_common(int opts)
        if (!(opts & USE_CTRL_CONN) && !port_or_pasv_was_seen())
                return; /* port_or_pasv_was_seen emitted error response */
 
-       ls_fd = popen_ls((opts & LONG_LISTING) ? "-l" : "-1");
+       ls_fd = popen_ls((opts & LONG_LISTING) ? "-lA" : "-1A");
        ls_fp = xfdopen_for_read(ls_fd);
 /* FIXME: filenames with embedded newlines are mishandled */
 
@@ -1102,10 +1102,11 @@ enum {
 #if !BB_MMU
        OPT_l = (1 << 0),
        OPT_1 = (1 << 1),
+       OPT_A = (1 << 2),
 #endif
-       OPT_v = (1 << ((!BB_MMU) * 2 + 0)),
-       OPT_S = (1 << ((!BB_MMU) * 2 + 1)),
-       OPT_w = (1 << ((!BB_MMU) * 2 + 2)) * ENABLE_FEATURE_FTP_WRITE,
+       OPT_v = (1 << ((!BB_MMU) * 3 + 0)),
+       OPT_S = (1 << ((!BB_MMU) * 3 + 1)),
+       OPT_w = (1 << ((!BB_MMU) * 3 + 2)) * ENABLE_FEATURE_FTP_WRITE,
 };
 
 int ftpd_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
@@ -1126,12 +1127,11 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv)
        G.timeout = 2 * 60;
        opt_complementary = "t+:T+:vv:SS";
 #if BB_MMU
-       opts = getopt32(argv,   "vS" IF_FEATURE_FTP_WRITE("w") "t:T:", &G.timeout, &abs_timeout, &G.verbose, &verbose_S);
+       opts = getopt32(argv,    "vS" IF_FEATURE_FTP_WRITE("w") "t:T:", &G.timeout, &abs_timeout, &G.verbose, &verbose_S);
 #else
-       opts = getopt32(argv, "l1vS" IF_FEATURE_FTP_WRITE("w") "t:T:", &G.timeout, &abs_timeout, &G.verbose, &verbose_S);
+       opts = getopt32(argv, "l1AvS" IF_FEATURE_FTP_WRITE("w") "t:T:", &G.timeout, &abs_timeout, &G.verbose, &verbose_S);
        if (opts & (OPT_l|OPT_1)) {
                /* Our secret backdoor to ls */
-/* TODO: pass -A? It shows dot files */
 /* TODO: pass --group-directories-first? would be nice, but ls doesn't do that yet */
                if (fchdir(3) != 0)
                        _exit(127);