%token DEFAULTS POLL SKIP VIA AKA LOCALDOMAINS PROTOCOL
%token AUTHENTICATE TIMEOUT KPOP SDPS KERBEROS4 KERBEROS5 KERBEROS
%token ENVELOPE QVIRTUAL USERNAME PASSWORD FOLDER SMTPHOST MDA BSMTP LMTP
-%token SMTPADDRESS SPAMRESPONSE PRECONNECT POSTCONNECT LIMIT
+%token SMTPADDRESS SPAMRESPONSE PRECONNECT POSTCONNECT LIMIT WARNINGS
%token NETSEC INTERFACE MONITOR PLUGIN PLUGOUT
%token IS HERE THERE TO MAP WILDCARD
%token BATCHLIMIT FETCHLIMIT EXPUNGE PROPERTIES
-%token SET LOGFILE DAEMON SYSLOG IDFILE INVISIBLE POSTMASTER WARNINGS
+%token SET LOGFILE DAEMON SYSLOG IDFILE INVISIBLE POSTMASTER BOUNCEMAIL
%token <proto> PROTO
%token <sval> STRING
%token <number> NUMBER
| SET IDFILE optmap STRING {run.idfile = xstrdup($4);}
| SET DAEMON optmap NUMBER {run.poll_interval = $4;}
| SET POSTMASTER optmap STRING {run.postmaster = xstrdup($4);}
+ | SET BOUNCEMAIL {run.bouncemail = TRUE;}
+ | SET NO BOUNCEMAIL {run.bouncemail = FALSE;}
| SET PROPERTIES optmap STRING {run.properties =xstrdup($4);}
| SET SYSLOG {run.use_syslog = TRUE;}
| SET INVISIBLE {run.invisible = TRUE;}
#endif /* NET_SECURITY */
}
| INTERFACE STRING {
-#if defined(linux) && !defined(INET6)
+#if (defined(linux) && !defined(INET6)) || defined(__FreeBSD__)
interface_parse($2, ¤t.server);
-#else /* defined(linux) && !defined(INET6) */
- fprintf(stderr, "fetchmail: interface option is only supported under Linux\n");
-#endif /* defined(linux) && !defined(INET6) */
+#else /* (defined(linux) && !defined(INET6)) || defined(__FreeBSD__) */
+ fprintf(stderr, "fetchmail: interface option is only supported under Linux and FreeBSD\n");
+#endif /* (defined(linux) && !defined(INET6)) || defined(__FreeBSD__) */
}
| MONITOR STRING {
-#if defined(linux) && !defined(INET6)
+#if (defined(linux) && !defined(INET6)) || defined(__FreeBSD__)
current.server.monitor = xstrdup($2);
-#else /* defined(linux) && !defined(INET6) */
+#else /* (defined(linux) && !defined(INET6)) || defined(__FreeBSD__) */
fprintf(stderr, "fetchmail: monitor option is only supported under Linux\n");
-#endif /* defined(linux) && !defined(INET6) */
+#endif /* (defined(linux) && !defined(INET6) || defined(__FreeBSD__)) */
}
| PLUGIN STRING { current.server.plugin = xstrdup($2); }
| PLUGOUT STRING { current.server.plugout = xstrdup($2); }
if (errno == ENOENT)
return(PS_SUCCESS);
else {
- report(stderr, errno, "lstat: %s", pathname);
+ report(stderr, "lstat: %s: %s\n", pathname, strerror(errno));
return(PS_IOERR);
}
}
return(PS_AUTHFAIL);
}
+#ifdef HAVE_GETEUID
+ if (statbuf.st_uid != geteuid())
+#else
if (statbuf.st_uid != getuid())
+#endif /* HAVE_GETEUID */
{
fprintf(stderr, "File %s must be owned by you.\n", pathname);
return(PS_AUTHFAIL);
if (strcmp(pathname, "-") == 0)
yyin = stdin;
else if ((yyin = fopen(pathname,"r")) == (FILE *)NULL) {
- report(stderr, errno, "open: %s", pathname);
+ report(stderr, "open: %s: %s\n", pathname, strerror(errno));
return(PS_IOERR);
}