]> Pileus Git - ~andy/fetchmail/blobdiff - rcfile_y.y
Credit John Beck's fixes.
[~andy/fetchmail] / rcfile_y.y
index 607e6bd31da38cbf41743d21ac10c86304e79c0b..91de6146178f10fd7c6ea66cc6789fe3b8056cbc 100644 (file)
@@ -66,7 +66,7 @@ extern char * yytext;
 %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
@@ -77,7 +77,7 @@ extern char * yytext;
 %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
 
@@ -262,16 +262,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(&current.localnames, $1, NULL); free($1);}
+mapping                : STRING                {if (0 == strcmp($1, "*")) {
+                                             current.wildcard = TRUE;
+                                         } else {
+                                           save_str_pair(&current.localnames, $1, NULL);
+                                         }
+                                        free($1);}
                | STRING MAP STRING     {save_str_pair(&current.localnames, $1, $3); free($1); free($3);}
                ;
 
@@ -301,10 +301,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 +344,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;}
@@ -489,7 +490,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);