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);  } | 
