diff options
-rw-r--r-- | fetchmail.man | 2 | ||||
-rw-r--r-- | options.c | 399 |
2 files changed, 206 insertions, 195 deletions
diff --git a/fetchmail.man b/fetchmail.man index 4ba075b9..bd6e378e 100644 --- a/fetchmail.man +++ b/fetchmail.man @@ -165,7 +165,7 @@ and the mailserver are echoed to stderr. Specifying causes normal progress/status messages which would be redundant or meaningless to be modified or omitted. .TP -.B \-N, --norewrite +.B \-n, --norewrite Normally, .I fetchmail edits RFC-822 address headers (To, From, Cc, Bcc, and Reply-To) in @@ -17,58 +17,63 @@ #include "getopt.h" #include "fetchmail.h" -#define LA_VERSION 1 -#define LA_ALL 2 -#define LA_KILL 3 -#define LA_KEEP 4 +#define LA_HELP 1 +#define LA_VERSION 2 +#define LA_CHECK 3 +#define LA_SILENT 4 #define LA_VERBOSE 5 -#define LA_SILENT 6 -#define LA_STDOUT 7 -#define LA_FLUSH 8 -#define LA_PROTOCOL 9 -#define LA_AUTHENTICATE 10 -#define LA_DAEMON 11 -#define LA_RCFILE 12 -#define LA_USERNAME 13 -#define LA_REMOTEFILE 14 -#define LA_PORT 15 -#define LA_SMTPHOST 16 -#define LA_MDA 17 -#define LA_LOGFILE 18 -#define LA_IDFILE 19 -#define LA_QUIT 20 -#define LA_NOREWRITE 21 -#define LA_CHECK 22 -#define LA_HELP 23 -#define LA_YYDEBUG 24 +#define LA_DAEMON 6 +#define LA_QUIT 7 +#define LA_LOGFILE 8 +#define LA_RCFILE 9 +#define LA_IDFILE 10 +#define LA_PROTOCOL 11 +#define LA_PORT 12 +#define LA_AUTHENTICATE 13 +#define LA_USERNAME 14 +#define LA_ALL 15 +#define LA_KILL 16 +#define LA_KEEP 17 +#define LA_FLUSH 18 +#define LA_NOREWRITE 19 +#define LA_REMOTEFILE 20 +#define LA_SMTPHOST 21 +#define LA_MDA 22 +#define LA_YYDEBUG 23 -static char *shortoptions = "P:p:VaKkvS:m:sFd:f:i:u:r:L:qN?"; +static char *shortoptions = "?Vcsvd:qL:f:i:p:P:A:u:akKFnr:S:m:y"; static struct option longoptions[] = { + {"help", no_argument, (int *) 0, LA_HELP }, {"version", no_argument, (int *) 0, LA_VERSION }, - {"all", no_argument, (int *) 0, LA_ALL }, - {"kill", no_argument, (int *) 0, LA_KILL }, - {"keep", no_argument, (int *) 0, LA_KEEP }, - {"verbose", no_argument, (int *) 0, LA_VERBOSE }, + {"check", no_argument, (int *) 0, LA_CHECK }, {"silent", no_argument, (int *) 0, LA_SILENT }, - {"flush", no_argument, (int *) 0, LA_FLUSH }, + {"verbose", no_argument, (int *) 0, LA_VERBOSE }, + {"daemon", required_argument, (int *) 0, LA_DAEMON }, + {"quit", no_argument, (int *) 0, LA_QUIT }, + {"logfile", required_argument, (int *) 0, LA_LOGFILE }, + {"fetchmailrc",required_argument,(int *) 0, LA_RCFILE }, + {"idfile", required_argument, (int *) 0, LA_IDFILE }, + {"protocol", required_argument, (int *) 0, LA_PROTOCOL }, {"proto", required_argument, (int *) 0, LA_PROTOCOL }, + {"port", required_argument, (int *) 0, LA_PORT }, {"auth", required_argument, (int *) 0, LA_PROTOCOL }, - {"daemon", required_argument, (int *) 0, LA_DAEMON }, - {"fetchmailrc",required_argument,(int *) 0, LA_RCFILE }, + {"user", required_argument, (int *) 0, LA_USERNAME }, {"username", required_argument, (int *) 0, LA_USERNAME }, + + {"all", no_argument, (int *) 0, LA_ALL }, + {"kill", no_argument, (int *) 0, LA_KILL }, + {"keep", no_argument, (int *) 0, LA_KEEP }, + {"flush", no_argument, (int *) 0, LA_FLUSH }, + {"norewrite", no_argument, (int *) 0, LA_NOREWRITE }, + {"remote", required_argument, (int *) 0, LA_REMOTEFILE }, - {"port", required_argument, (int *) 0, LA_PORT }, {"smtphost", required_argument, (int *) 0, LA_SMTPHOST }, {"mda", required_argument, (int *) 0, LA_MDA }, - {"logfile", required_argument, (int *) 0, LA_LOGFILE }, - {"idfile", required_argument, (int *) 0, LA_IDFILE }, - {"quit", no_argument, (int *) 0, LA_QUIT }, - {"norewrite", no_argument, (int *) 0, LA_NOREWRITE }, - {"check", no_argument, (int *) 0, LA_CHECK }, - {"help", no_argument, (int *) 0, LA_HELP }, + {"yydebug", no_argument, (int *) 0, LA_YYDEBUG }, + {(char *) 0, no_argument, (int *) 0, 0 } }; @@ -98,170 +103,176 @@ int argc; char **argv; struct hostrec *queryctl; { - int c; - int ocount = 0; /* count of destinations specified */ - int errflag = 0; /* TRUE when a syntax error is detected */ - int option_index; + int c; + int ocount = 0; /* count of destinations specified */ + int errflag = 0; /* TRUE when a syntax error is detected */ + int option_index; + + memset(queryctl, '\0', sizeof(struct hostrec)); /* start clean */ - memset(queryctl, '\0', sizeof(struct hostrec)); /* start clean */ + while (!errflag && + (c = getopt_long(argc,argv,shortoptions, + longoptions,&option_index)) != -1) { - while (!errflag && - (c = getopt_long(argc,argv,shortoptions, - longoptions,&option_index)) != -1) { + switch (c) { + case 'V': + case LA_VERSION: + versioninfo = !0; + break; + case 'c': + case LA_CHECK: + check_only = 1; + break; + case 's': + case LA_SILENT: + outlevel = O_SILENT; + break; + case 'v': + case LA_VERBOSE: + outlevel = O_VERBOSE; + break; + case 'd': + case LA_DAEMON: + poll_interval = atoi(optarg); + break; + case 'q': + case LA_QUIT: + quitmode = 1; + break; + case 'L': + case LA_LOGFILE: + logfile = optarg; + break; + case 'f': + case LA_RCFILE: + rcfile = (char *) xmalloc(strlen(optarg)+1); + strcpy(rcfile,optarg); + break; + case 'i': + case LA_IDFILE: + idfile = (char *) xmalloc(strlen(optarg)+1); + strcpy(idfile,optarg); + break; + case 'p': + case LA_PROTOCOL: + /* XXX -- should probably use a table lookup here */ + if (strcasecmp(optarg,"pop2") == 0) + queryctl->protocol = P_POP2; + else if (strcasecmp(optarg,"pop3") == 0) + queryctl->protocol = P_POP3; + else if (strcasecmp(optarg,"imap") == 0) + queryctl->protocol = P_IMAP; + else if (strcasecmp(optarg,"apop") == 0) + queryctl->protocol = P_APOP; + else if (strcasecmp(optarg,"kpop") == 0) + { + queryctl->protocol = P_POP3; + queryctl->port = KPOP_PORT; + queryctl->authenticate == A_KERBEROS; + } + else { + fprintf(stderr,"Invalid protocol '%s'\n specified.\n", optarg); + errflag++; + } + break; + case 'P': + case LA_PORT: + queryctl->port = atoi(optarg); + break; + case 'A': + case LA_AUTHENTICATE: + if (strcmp(optarg, "password") == 0) + queryctl->authenticate = A_PASSWORD; + else if (strcmp(optarg, "kerberos") == 0) + queryctl->authenticate = A_KERBEROS; + else { + fprintf(stderr,"Invalid authentication '%s'\n specified.\n", optarg); + errflag++; + } + break; + case 'u': + case LA_USERNAME: + strncpy(queryctl->remotename,optarg,sizeof(queryctl->remotename)-1); + break; - switch (c) { - case 'V': - case LA_VERSION: - versioninfo = !0; - break; - case 'a': - case LA_ALL: - queryctl->fetchall = !0; - break; - case 'K': - case LA_KILL: - queryctl->keep = 0; - break; - case 'k': - case LA_KEEP: - queryctl->keep = !0; - break; - case 'v': - case LA_VERBOSE: - outlevel = O_VERBOSE; - break; - case 's': - case LA_SILENT: - outlevel = O_SILENT; - break; - case 'F': - case LA_FLUSH: - queryctl->flush = !0; - break; - case 'p': - case LA_PROTOCOL: - /* XXX -- should probably use a table lookup here */ - if (strcasecmp(optarg,"pop2") == 0) - queryctl->protocol = P_POP2; - else if (strcasecmp(optarg,"pop3") == 0) - queryctl->protocol = P_POP3; - else if (strcasecmp(optarg,"imap") == 0) - queryctl->protocol = P_IMAP; - else if (strcasecmp(optarg,"apop") == 0) - queryctl->protocol = P_APOP; - else if (strcasecmp(optarg,"kpop") == 0) - { - queryctl->protocol = P_POP3; - queryctl->port = KPOP_PORT; - queryctl->authenticate == A_KERBEROS; + case 'a': + case LA_ALL: + queryctl->fetchall = !0; + break; + case 'K': + case LA_KILL: + queryctl->keep = 0; + break; + case 'k': + case LA_KEEP: + queryctl->keep = !0; + break; + case 'F': + case LA_FLUSH: + queryctl->flush = !0; + break; + case 'n': + case LA_NOREWRITE: + queryctl->norewrite = 1; + break; + case 'r': + case LA_REMOTEFILE: + strncpy(queryctl->mailbox,optarg,sizeof(queryctl->mailbox)-1); + break; + case 'S': + case LA_SMTPHOST: + strncpy(queryctl->smtphost,optarg,sizeof(queryctl->smtphost)-1); + ocount++; + break; + case 'm': + case LA_MDA: + strncpy(queryctl->mda,optarg,sizeof(queryctl->mda)); + ocount++; + break; + case 'y': + case LA_YYDEBUG: + yydebug = 1; + break; + + case '?': + case LA_HELP: + default: + errflag++; } - else { - fprintf(stderr,"Invalid protocol '%s'\n specified.\n", optarg); - errflag++; - } - break; - case 'd': - case LA_DAEMON: - poll_interval = atoi(optarg); - break; - case 'f': - case LA_RCFILE: - rcfile = (char *) xmalloc(strlen(optarg)+1); - strcpy(rcfile,optarg); - break; - case 'i': - case LA_IDFILE: - idfile = (char *) xmalloc(strlen(optarg)+1); - strcpy(idfile,optarg); - break; - case 'u': - case LA_USERNAME: - strncpy(queryctl->remotename,optarg,sizeof(queryctl->remotename)-1); - break; - case 'r': - case LA_REMOTEFILE: - strncpy(queryctl->mailbox,optarg,sizeof(queryctl->mailbox)-1); - break; - case 'm': - case LA_MDA: - strncpy(queryctl->mda,optarg,sizeof(queryctl->mda)); - ocount++; - break; - case 'P': - case LA_PORT: - queryctl->port = atoi(optarg); - break; - case 'A': - case LA_AUTHENTICATE: - if (strcmp(optarg, "password") == 0) - queryctl->authenticate = A_PASSWORD; - else if (strcmp(optarg, "kerberos") == 0) - queryctl->authenticate = A_KERBEROS; - else { - fprintf(stderr,"Invalid authentication '%s'\n specified.\n", optarg); - errflag++; - } - break; - case 'S': - case LA_SMTPHOST: - strncpy(queryctl->smtphost,optarg,sizeof(queryctl->smtphost)-1); - ocount++; - break; - case 'L': - case LA_LOGFILE: - logfile = optarg; - break; - case 'q': - case LA_QUIT: - quitmode = 1; - break; - case 'N': - case LA_NOREWRITE: - queryctl->norewrite = 1; - break; - case 'c': - case LA_CHECK: - check_only = 1; - break; - case LA_YYDEBUG: - yydebug = 1; - break; - case '?': - case LA_HELP: - default: - errflag++; } - } - if (errflag || ocount > 1) { - /* squawk if syntax errors were detected */ - fputs("usage: fetchmail [options] [server ...]\n", stderr); - fputs(" Options are as follows:\n",stderr); - fputs(" -?, --help display this option help\n", stderr); - fputs(" -V, --version display version info\n", stderr); - fputs(" -s, --silent work silently\n", stderr); - fputs(" -v, --verbose work noisily (diagnostic output)\n", stderr); - fputs(" -d, --daemon run as a daemon once per n seconds\n", stderr); - fputs(" -c, --check check for messages without fetching\n", stderr); - fputs(" -L, --logfile specify logfile name\n", stderr); - fputs(" -q, --quit kill daemon process\n", stderr); - fputs(" -f, --fetchmailrc specify alternate run control file\n", stderr); - fputs(" -i, --idfile specify alternate UIDs file\n", stderr); + if (errflag || ocount > 1) { + /* squawk if syntax errors were detected */ + fputs("usage: fetchmail [options] [server ...]\n", stderr); + fputs(" Options are as follows:\n",stderr); + fputs(" -?, --help display this option help\n", stderr); + fputs(" -V, --version display version info\n", stderr); + + fputs(" -c, --check check for messages without fetching\n", stderr); + fputs(" -s, --silent work silently\n", stderr); + fputs(" -v, --verbose work noisily (diagnostic output)\n", stderr); + fputs(" -d, --daemon run as a daemon once per n seconds\n", stderr); + fputs(" -q, --quit kill daemon process\n", stderr); + fputs(" -L, --logfile specify logfile name\n", stderr); + fputs(" -f, --fetchmailrc specify alternate run control file\n", stderr); + fputs(" -i, --idfile specify alternate UIDs file\n", stderr); - fputs(" -p, --protocol specify pop2, pop3, imap, apop, rpop, kpop\n", stderr); - fputs(" -P, --port TCP/IP service port to connect to\n",stderr); - fputs(" -A, --auth authentication type\n",stderr); + fputs(" -p, --protocol specify pop2, pop3, imap, apop, rpop, kpop\n", stderr); + fputs(" -P, --port TCP/IP service port to connect to\n",stderr); + fputs(" -A, --auth authentication type (password or kerberos)\n",stderr); - fputs(" -u, --username specify users's login on server\n", stderr); - fputs(" -a, --all retrieve old and new messages\n", stderr); - fputs(" -F, --flush delete old messages from server\n", stderr); - fputs(" -K, --kill delete new messages after retrieval\n", stderr); - fputs(" -k, --keep save new messages after retrieval\n", stderr); - fputs(" -S, --smtphost set SMTP forwarding host\n", stderr); - fputs(" -r, --remote specify remote folder name\n", stderr); - return(-1); - } + fputs(" -u, --username specify users's login on server\n", stderr); + fputs(" -a, --all retrieve old and new messages\n", stderr); + fputs(" -K, --kill delete new messages after retrieval\n", stderr); + fputs(" -k, --keep save new messages after retrieval\n", stderr); + fputs(" -F, --flush delete old messages from server\n", stderr); + fputs(" -n, --norewrite don't rewrite header addresses\n", stderr); + + fputs(" -S, --smtphost set SMTP forwarding host\n", stderr); + fputs(" -r, --remote specify remote folder name\n", stderr); + return(-1); + } - return(optind); + return(optind); } |