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