X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=rcfile_y.y;h=39bb7a99c217e83adde71af8e09cf1d277df1240;hb=24ab4a608c8ee1613698a1a312a7b30d138a241e;hp=c2ff40b4a2abec9747a5f51a4843da922ec227a5;hpb=82d02e1f39249cce1362c0a41c4fe2a7005ae835;p=~andy%2Ffetchmail diff --git a/rcfile_y.y b/rcfile_y.y index c2ff40b4..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,14 +57,16 @@ 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 USERNAME PASSWORD FOLDER SMTPHOST FETCHDOMAINS MDA BSMTP LMTP +%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 @@ -121,7 +117,7 @@ statement : SET LOGFILE optmap STRING {run.logfile = prependdir ($4, rcfiledir); run.pinentry_timeout = $4; #else yyerror(GT_("pwmd not enabled")); -#endif +#endif } /* @@ -161,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;} @@ -181,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 { @@ -243,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();} @@ -269,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);} ; @@ -308,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;} @@ -386,7 +384,7 @@ user_option : TO localnames HERE current.pwmd_socket = xstrdup($2); #else yyerror(GT_("pwmd not enabled")); -#endif +#endif } | PWMD_FILE STRING { @@ -394,7 +392,7 @@ user_option : TO localnames HERE current.pwmd_file = xstrdup($2); #else yyerror(GT_("pwmd not enabled")); -#endif +#endif } ; %% @@ -419,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; @@ -453,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__ */ @@ -463,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); } @@ -513,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);