]> Pileus Git - ~andy/fetchmail/blobdiff - rcfile_y.y
Try to fix a nasty MIME-decoding bug.
[~andy/fetchmail] / rcfile_y.y
index adf21428978ea83d2bee4c0c955d2c415562f2ed..793426fc21d665efbd24b6e6f7d4b485466fda9c 100644 (file)
@@ -60,11 +60,11 @@ extern char * yytext;
 %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
@@ -88,6 +88,8 @@ statement     : SET LOGFILE optmap STRING     {run.logfile = xstrdup($4);}
                | 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;}
@@ -207,18 +209,18 @@ serv_option       : AKA alias_list
 #endif /* NET_SECURITY */
                                        }
                | INTERFACE STRING      {
-#if defined(linux) && !defined(INET6)
+#if (defined(linux) && !defined(INET6)) || defined(__FreeBSD__)
                                        interface_parse($2, &current.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); }
@@ -375,7 +377,7 @@ int prc_filecheck(const char *pathname, const flag securecheck)
        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);
        }
     }
@@ -395,7 +397,11 @@ int prc_filecheck(const char *pathname, const flag securecheck)
        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);
@@ -423,7 +429,7 @@ int prc_parse_file (const char *pathname, const flag securecheck)
     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);
     }