ntpd: default to FEATURE_NTP_AUTH=y
[oweals/busybox.git] / mailutils / popmaildir.c
index 6b733441f7939fccd094315ad62dcbc4c6d9b7c1..589456715420d372f837c203491f51b68ce8c9d6 100644 (file)
@@ -9,6 +9,59 @@
  *
  * Licensed under GPLv2, see file LICENSE in this source tree.
  */
+//config:config POPMAILDIR
+//config:      bool "popmaildir (10 kb)"
+//config:      default y
+//config:      help
+//config:      Simple yet powerful POP3 mail popper. Delivers content
+//config:      of remote mailboxes to local Maildir.
+//config:
+//config:config FEATURE_POPMAILDIR_DELIVERY
+//config:      bool "Allow message filters and custom delivery program"
+//config:      default y
+//config:      depends on POPMAILDIR
+//config:      help
+//config:      Allow to use a custom program to filter the content
+//config:      of the message before actual delivery (-F "prog [args...]").
+//config:      Allow to use a custom program for message actual delivery
+//config:      (-M "prog [args...]").
+
+//applet:IF_POPMAILDIR(APPLET(popmaildir, BB_DIR_USR_SBIN, BB_SUID_DROP))
+
+//kbuild:lib-$(CONFIG_POPMAILDIR) += popmaildir.o mail.o
+
+//usage:#define popmaildir_trivial_usage
+//usage:       "[OPTIONS] MAILDIR [CONN_HELPER ARGS]"
+//usage:#define popmaildir_full_usage "\n\n"
+//usage:       "Fetch content of remote mailbox to local maildir\n"
+/* //usage:  "\n       -b              Binary mode. Ignored" */
+/* //usage:  "\n       -d              Debug. Ignored" */
+/* //usage:  "\n       -m              Show used memory. Ignored" */
+/* //usage:  "\n       -V              Show version. Ignored" */
+/* //usage:  "\n       -c              Use tcpclient. Ignored" */
+/* //usage:  "\n       -a              Use APOP protocol. Implied. If server supports APOP -> use it" */
+//usage:     "\n       -s              Skip authorization"
+//usage:     "\n       -T              Get messages with TOP instead of RETR"
+//usage:     "\n       -k              Keep retrieved messages on the server"
+//usage:     "\n       -t SEC          Network timeout"
+//usage:       IF_FEATURE_POPMAILDIR_DELIVERY(
+//usage:     "\n       -F 'PROG ARGS'  Filter program (may be repeated)"
+//usage:     "\n       -M 'PROG ARGS'  Delivery program"
+//usage:       )
+//usage:     "\n"
+//usage:     "\nFetch from plain POP3 server:"
+//usage:     "\npopmaildir -k DIR nc pop3.server.com 110 <user_and_pass.txt"
+//usage:     "\nFetch from SSLed POP3 server and delete fetched emails:"
+//usage:     "\npopmaildir DIR -- openssl s_client -quiet -connect pop3.server.com:995 <user_and_pass.txt"
+/* //usage:  "\n       -R BYTES        Remove old messages on the server >= BYTES. Ignored" */
+/* //usage:  "\n       -Z N1-N2        Remove messages from N1 to N2 (dangerous). Ignored" */
+/* //usage:  "\n       -L BYTES        Don't retrieve new messages >= BYTES. Ignored" */
+/* //usage:  "\n       -H LINES        Type first LINES of a message. Ignored" */
+//usage:
+//usage:#define popmaildir_example_usage
+//usage:       "$ popmaildir -k ~/Maildir -- nc pop.drvv.ru 110 [<password_file]\n"
+//usage:       "$ popmaildir ~/Maildir -- openssl s_client -quiet -connect pop.gmail.com:995 [<password_file]\n"
+
 #include "libbb.h"
 #include "mail.h"
 
@@ -72,9 +125,9 @@ int popmaildir_main(int argc UNUSED_PARAM, char **argv)
        INIT_G();
 
        // parse options
-       opt_complementary = "-1:dd:t+:R+:L+:H+";
-       opts = getopt32(argv,
-               "bdmVcasTkt:" "R:Z:L:H:" IF_FEATURE_POPMAILDIR_DELIVERY("M:F:"),
+       opts = getopt32(argv, "^"
+               "bdmVcasTkt:+" "R:+Z:L:+H:+" IF_FEATURE_POPMAILDIR_DELIVERY("M:F:")
+               "\0" "-1:dd",
                &timeout, NULL, NULL, NULL, &opt_nlines
                IF_FEATURE_POPMAILDIR_DELIVERY(, &delivery, &delivery) // we treat -M and -F the same
        );
@@ -212,7 +265,7 @@ int popmaildir_main(int argc UNUSED_PARAM, char **argv)
 
                // atomically move message to ./new/
                target = xstrdup(filename);
-               strncpy(target, "new", 3);
+               memcpy(target, "new", 3);
                // ... or just stop receiving on failure
                if (rename_or_warn(filename, target))
                        break;