X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=rcfile_y.y;h=39bb7a99c217e83adde71af8e09cf1d277df1240;hb=24ab4a608c8ee1613698a1a312a7b30d138a241e;hp=607e6bd31da38cbf41743d21ac10c86304e79c0b;hpb=42e440f3bf4698e3ad273b4eb28bc504656573a1;p=~andy%2Ffetchmail diff --git a/rcfile_y.y b/rcfile_y.y index 607e6bd3..39bb7a99 100644 --- a/rcfile_y.y +++ b/rcfile_y.y @@ -9,17 +9,11 @@ #include #include #include -#if defined(HAVE_SYS_WAIT_H) #include -#endif #include #include -#if defined(STDC_HEADERS) #include -#endif -#if defined(HAVE_UNISTD_H) #include -#endif #include #if defined(__CYGWIN__) @@ -27,7 +21,7 @@ #endif /* __CYGWIN__ */ #include "fetchmail.h" -#include "i18n.h" +#include "gettext.h" /* parser reads these */ char *rcfile; /* path name of rc file */ @@ -63,21 +57,23 @@ extern char * yytext; %token DEFAULTS POLL SKIP VIA AKA LOCALDOMAINS PROTOCOL %token AUTHENTICATE TIMEOUT KPOP SDPS ENVELOPE QVIRTUAL +%token PINENTRY_TIMEOUT PWMD_SOCKET PWMD_FILE %token USERNAME PASSWORD FOLDER SMTPHOST FETCHDOMAINS MDA BSMTP LMTP %token SMTPADDRESS SMTPNAME SPAMRESPONSE PRECONNECT POSTCONNECT LIMIT WARNINGS %token INTERFACE MONITOR PLUGIN PLUGOUT -%token IS HERE THERE TO MAP WILDCARD +%token IS HERE THERE TO MAP %token BATCHLIMIT FETCHLIMIT FETCHSIZELIMIT FASTUIDL EXPUNGE PROPERTIES %token SET LOGFILE DAEMON SYSLOG IDFILE PIDFILE INVISIBLE POSTMASTER BOUNCEMAIL %token SPAMBOUNCE SOFTBOUNCE SHOWDOTS %token BADHEADER ACCEPT REJECT_ +%token RETRIEVEERROR ABORT CONTINUE MARKSEEN %token PROTO AUTHTYPE %token STRING %token NUMBER %token NO KEEP FLUSH LIMITFLUSH FETCHALL REWRITE FORCECR STRIPCR PASS8BITS %token DROPSTATUS DROPDELIVERED %token DNS SERVICE PORT UIDL INTERVAL MIMEDECODE IDLE CHECKALIAS -%token SSL SSLKEY SSLCERT SSLPROTO SSLCERTCK SSLCERTPATH SSLCOMMONNAME SSLFINGERPRINT +%token SSL SSLKEY SSLCERT SSLPROTO SSLCERTCK SSLCERTFILE SSLCERTPATH SSLCOMMONNAME SSLFINGERPRINT %token PRINCIPAL ESMTPNAME ESMTPPASSWORD %token TRACEPOLLS @@ -116,6 +112,13 @@ statement : SET LOGFILE optmap STRING {run.logfile = prependdir ($4, rcfiledir); | SET NO INVISIBLE {run.invisible = FALSE;} | SET SHOWDOTS {run.showdots = FLAG_TRUE;} | SET NO SHOWDOTS {run.showdots = FLAG_FALSE;} + | SET PINENTRY_TIMEOUT optmap NUMBER { +#ifdef HAVE_LIBPWMD + run.pinentry_timeout = $4; +#else + yyerror(GT_("pwmd not enabled")); +#endif + } /* * The way the next two productions are written depends on the fact that @@ -154,14 +157,13 @@ serv_option : AKA alias_list | PROTOCOL PROTO {current.server.protocol = $2;} | PROTOCOL KPOP { current.server.protocol = P_POP3; - - if (current.server.authenticate == A_PASSWORD) #ifdef KERBEROS_V5 + if (current.server.authenticate == A_PASSWORD) current.server.authenticate = A_KERBEROS_V5; -#else - current.server.authenticate = A_KERBEROS_V4; -#endif /* KERBEROS_V5 */ current.server.service = KPOP_PORT; +#else + yyerror(GT_("Kerberos not enabled.")); +#endif } | PRINCIPAL STRING {current.server.principal = $2;} | ESMTPNAME STRING {current.server.esmtp_name = $2;} @@ -174,8 +176,8 @@ serv_option : AKA alias_list yyerror(GT_("SDPS not enabled.")); #endif /* SDPS_ENABLE */ } - | UIDL {current.server.uidl = FLAG_TRUE;} - | NO UIDL {current.server.uidl = FLAG_FALSE;} + | UIDL {/* EMPTY - removed in 7.0.0 */} + | NO UIDL {/* EMPTY - removed in 7.0.0 */} | CHECKALIAS {current.server.checkalias = FLAG_TRUE;} | NO CHECKALIAS {current.server.checkalias = FLAG_FALSE;} | SERVICE STRING { @@ -236,6 +238,9 @@ serv_option : AKA alias_list | NO TRACEPOLLS {current.server.tracepolls = FLAG_FALSE;} | BADHEADER ACCEPT {current.server.badheader = BHACCEPT;} | BADHEADER REJECT_ {current.server.badheader = BHREJECT;} + | RETRIEVEERROR ABORT {current.server.retrieveerror = RE_ABORT;} + | RETRIEVEERROR CONTINUE {current.server.retrieveerror = RE_CONTINUE;} + | RETRIEVEERROR MARKSEEN {current.server.retrieveerror = RE_MARKSEEN;} ; userspecs : user1opts {record_current(); user_reset();} @@ -262,16 +267,16 @@ user1opts : user_option | user1opts user_option ; -localnames : WILDCARD {current.wildcard = TRUE;} - | mapping_list {current.wildcard = FALSE;} - | mapping_list WILDCARD {current.wildcard = TRUE;} - ; - mapping_list : mapping | mapping_list mapping ; -mapping : STRING {save_str_pair(¤t.localnames, $1, NULL); free($1);} +mapping : STRING {if (0 == strcmp($1, "*")) { + current.wildcard = TRUE; + } else { + save_str_pair(¤t.localnames, $1, NULL); + } + free($1);} | STRING MAP STRING {save_str_pair(¤t.localnames, $1, $3); free($1); free($3);} ; @@ -301,10 +306,10 @@ num_list : NUMBER } ; -user_option : TO localnames HERE - | TO localnames - | IS localnames HERE - | IS localnames +user_option : TO mapping_list HERE + | TO mapping_list + | IS mapping_list HERE + | IS mapping_list | IS STRING THERE {current.remotename = $2;} | PASSWORD STRING {current.password = $2;} @@ -344,6 +349,7 @@ user_option : TO localnames HERE | SSLCERT STRING {current.sslcert = prependdir ($2, rcfiledir); free($2);} | SSLPROTO STRING {current.sslproto = $2;} | SSLCERTCK {current.sslcertck = FLAG_TRUE;} + | SSLCERTFILE STRING {current.sslcertfile = prependdir($2, rcfiledir); free($2);} | SSLCERTPATH STRING {current.sslcertpath = prependdir($2, rcfiledir); free($2);} | SSLCOMMONNAME STRING {current.sslcommonname = $2;} | SSLFINGERPRINT STRING {current.sslfingerprint = $2;} @@ -372,6 +378,22 @@ user_option : TO localnames HERE | EXPUNGE NUMBER {current.expunge = NUM_VALUE_IN($2);} | PROPERTIES STRING {current.properties = $2;} + + | PWMD_SOCKET STRING { +#ifdef HAVE_LIBPWMD + current.pwmd_socket = xstrdup($2); +#else + yyerror(GT_("pwmd not enabled")); +#endif + } + + | PWMD_FILE STRING { +#ifdef HAVE_LIBPWMD + current.pwmd_file = xstrdup($2); +#else + yyerror(GT_("pwmd not enabled")); +#endif + } ; %% @@ -395,7 +417,6 @@ void yyerror (const char *s) int prc_filecheck(const char *pathname, const flag securecheck /** shortcuts permission, filetype and uid tests if false */) { -#ifndef __EMX__ struct stat statbuf; errno = 0; @@ -429,7 +450,6 @@ int prc_filecheck(const char *pathname, return(PS_IOERR); } -#ifndef __BEOS__ #ifdef __CYGWIN__ if (cygwin_internal(CW_CHECK_NTSEC, pathname)) #endif /* __CYGWIN__ */ @@ -439,18 +459,12 @@ int prc_filecheck(const char *pathname, pathname); return(PS_IOERR); } -#endif /* __BEOS__ */ -#ifdef HAVE_GETEUID if (statbuf.st_uid != geteuid()) -#else - if (statbuf.st_uid != getuid()) -#endif /* HAVE_GETEUID */ { fprintf(stderr, GT_("File %s must be owned by you.\n"), pathname); return(PS_IOERR); } -#endif return(PS_SUCCESS); } @@ -489,7 +503,8 @@ int prc_parse_file (const char *pathname, const flag securecheck) yyparse(); /* parse entire file */ - fclose(yyin); /* not checking this should be safe, file mode was r */ + if (yyin != stdin) + fclose(yyin); /* not checking this should be safe, file mode was r */ if (prc_errflag) return(PS_SYNTAX);