]> Pileus Git - ~andy/fetchmail/blobdiff - options.c
Merge branch '4-integration-retrieve-error-policy' into next
[~andy/fetchmail] / options.c
index 6d7e87a2b669800d2388c31de9ba937560c6db83..356bbc91c8e1661bb0626c370958ddcf15aa9ab3 100644 (file)
--- a/options.c
+++ b/options.c
@@ -16,7 +16,7 @@
 
 #include "getopt.h"
 #include "fetchmail.h"
-#include "i18n.h"
+#include "gettext.h"
 
 enum {
     LA_INVISIBLE = 256,
@@ -51,15 +51,24 @@ enum {
     LA_IDLE,
     LA_NOSOFTBOUNCE,
     LA_SOFTBOUNCE,
-    LA_BADHEADER
+    LA_BADHEADER,
+    LA_RETRIEVEERROR
 };
 
-/* options still left: CgGhHjJoORTWxXYz */
-static const char *shortoptions = 
+static const char *shortoptions =
+/* options still left: ghHjJoRTWxXYz */
+#ifdef HAVE_LIBPWMD
+       "O:C:G:"
+#endif
        "?Vcsvd:NqL:f:i:p:UP:A:t:E:Q:u:akKFnl:r:S:Z:b:B:e:m:I:M:yw:D:";
 
 static const struct option longoptions[] = {
 /* this can be const because all flag fields are 0 and will never get set */
+#ifdef HAVE_LIBPWMD
+  {"pwmd-socket",      required_argument,  (int *) 0, 'C' },
+  {"pwmd-file",                required_argument,  (int *) 0, 'G' },
+  {"pinentry-timeout", required_argument,  (int *) 0, 'O' },
+#endif
   {"help",     no_argument,       (int *) 0, '?' },
   {"version",  no_argument,       (int *) 0, 'V' },
   {"check",    no_argument,       (int *) 0, 'c' },
@@ -105,6 +114,7 @@ static const struct option longoptions[] = {
   {"norewrite",        no_argument,       (int *) 0, 'n' },
   {"limit",    required_argument, (int *) 0, 'l' },
   {"warnings", required_argument, (int *) 0, 'w' },
+  {"retrieve-error",   required_argument, (int *) 0, LA_RETRIEVEERROR },
 
   {"folder",   required_argument, (int *) 0, 'r' },
   {"smtphost", required_argument, (int *) 0, 'S' },
@@ -218,6 +228,17 @@ int parsecmdline (int argc /** argument count */,
                            longoptions, &option_index)) != -1)
     {
        switch (c) {
+#ifdef HAVE_LIBPWMD
+       case 'C':
+           ctl->pwmd_socket = prependdir(optarg, currentwd);
+           break;
+       case 'G':
+           ctl->pwmd_file = xstrdup(optarg);
+           break;
+       case 'O':
+           rctl->pinentry_timeout = atoi(optarg);
+           break;
+#endif
        case 'V':
            versioninfo = TRUE;
            break;
@@ -300,16 +321,12 @@ int parsecmdline (int argc /** argument count */,
                ctl->server.protocol = P_POP3;
            else if (strcasecmp(optarg,"apop") == 0)
                ctl->server.protocol = P_APOP;
-           else if (strcasecmp(optarg,"rpop") == 0)
-               ctl->server.protocol = P_RPOP;
            else if (strcasecmp(optarg,"kpop") == 0)
            {
                ctl->server.protocol = P_POP3;
                ctl->server.service = KPOP_PORT;
 #ifdef KERBEROS_V5
                ctl->server.authenticate =  A_KERBEROS_V5;
-#else
-               ctl->server.authenticate =  A_KERBEROS_V4;
 #endif /* KERBEROS_V5 */
            }
            else if (strcasecmp(optarg,"imap") == 0)
@@ -335,16 +352,12 @@ int parsecmdline (int argc /** argument count */,
        case LA_AUTH:
            if (strcmp(optarg, "password") == 0)
                ctl->server.authenticate = A_PASSWORD;
-           else if (strcmp(optarg, "kerberos") == 0)
 #ifdef KERBEROS_V5
+           else if (strcmp(optarg, "kerberos") == 0)
                ctl->server.authenticate = A_KERBEROS_V5;
-#else
-               ctl->server.authenticate = A_KERBEROS_V4;
-#endif /* KERBEROS_V5 */
            else if (strcmp(optarg, "kerberos_v5") == 0)
                ctl->server.authenticate = A_KERBEROS_V5;
-           else if (strcmp(optarg, "kerberos_v4") == 0)
-               ctl->server.authenticate = A_KERBEROS_V4;
+#endif /* KERBEROS_V5 */
            else if (strcmp(optarg, "ssh") == 0)
                ctl->server.authenticate = A_SSH;
            else if (strcasecmp(optarg, "external") == 0)
@@ -566,6 +579,19 @@ int parsecmdline (int argc /** argument count */,
            ctl->server.tracepolls = FLAG_TRUE;
            break;
 
+       case LA_RETRIEVEERROR:
+           if (strcasecmp(optarg,"abort") == 0) {
+               ctl->server.retrieveerror = RE_ABORT;
+           } else if (strcasecmp(optarg,"continue") == 0) {
+               ctl->server.retrieveerror = RE_CONTINUE;
+           } else if (strcasecmp(optarg,"markseen") == 0) {
+               ctl->server.retrieveerror = RE_MARKSEEN;
+           } else {
+               fprintf(stderr,GT_("Invalid retrieve-error policy `%s' specified.\n"), optarg);
+               errflag++;
+           }
+           break;
+
        case '?':
        default:
            helpflag++;
@@ -615,8 +641,16 @@ int parsecmdline (int argc /** argument count */,
        P(GT_("      --plugout     specify external command to open smtp connection\n"));
        P(GT_("      --bad-header {reject|accept}\n"
              "                    specify policy for handling messages with bad headers\n"));
+       P(GT_("      --retrieve-error {abort|continue|markseen}\n"
+              "                        specify policy for processing messages with retrieve errors\n"));
 
        P(GT_("  -p, --protocol    specify retrieval protocol (see man page)\n"));
+#ifdef HAVE_LIBPWMD
+        P(GT_("  -C, --pwmd-socket pwmd socket path (~/.pwmd/socket)\n"));
+        P(GT_("  -G, --pwmd-file   filename to use on the pwmd server\n"));
+        P(GT_("  -O, --pinentry-timeout   seconds until pinentry is canceled\n"));
+#endif
        P(GT_("  -U, --uidl        force the use of UIDLs (pop3 only)\n"));
        P(GT_("      --port        TCP port to connect to (obsolete, use --service)\n"));
        P(GT_("  -P, --service     TCP service to connect to (can be numeric TCP port)\n"));