]> Pileus Git - ~andy/fetchmail/blobdiff - sink.c
Minor bug fixes for socket.c
[~andy/fetchmail] / sink.c
diff --git a/sink.c b/sink.c
index e1f008c91e562770e7a8df8151a967a7392f1718..5d92556f01d5435ef1d9e1d847521a4b50d6b350 100644 (file)
--- a/sink.c
+++ b/sink.c
@@ -114,7 +114,7 @@ int smtp_setup(struct query *ctl)
         */
        struct idlist   *idp;
        const char *id_me = run.invisible ? ctl->server.truename : fetchmailhost;
-       int oldphase = phase;
+       int oldphase;
        char *parsed_host = NULL;
 
        errno = 0;
@@ -131,7 +131,7 @@ int smtp_setup(struct query *ctl)
        for (idp = ctl->smtphunt; idp; idp = idp->next)
        {
            char        *cp;
-           char        *portnum = SMTP_PORT;
+           const char  *portnum = SMTP_PORT;
 
            ctl->smtphost = idp->id;  /* remember last host tried. */
            if (ctl->smtphost[0]=='/')
@@ -262,12 +262,13 @@ char *rcpt_address(struct query *ctl, const char *id,
 }
 
 static int send_bouncemail(struct query *ctl, struct msgblk *msg,
-                          int userclass, char *message /* should have \r\n at the end */,
+                          int userclass, const char *message /* should have \r\n at the end */,
                           int nerrors, char *errors[])
 /* bounce back an error report a la RFC 1892 */
 {
     char daemon_name[15 + HOSTLEN] = "MAILER-DAEMON@";
-    char boundary[BUFSIZ], *bounce_to;
+    char boundary[BUFSIZ];
+    const char *bounce_to;
     int sock;
     static char *fqdn_of_host = NULL;
     const char *md1 = "MAILER-DAEMON", *md2 = "MAILER-DAEMON@";
@@ -440,8 +441,6 @@ static int handle_smtp_report(struct query *ctl, struct msgblk *msg)
 {
     int smtperr = atoi(smtp_response);
     char *responses[1];
-    struct idlist *walk;
-    int found = 0;
 
     responses[0] = xstrdup(smtp_response);
 
@@ -465,15 +464,7 @@ static int handle_smtp_report(struct query *ctl, struct msgblk *msg)
      * messages, which are probably in English (none of the
      * MTAs I know about are internationalized).
      */
-    for( walk = ctl->antispam; walk; walk = walk->next )
-        if ( walk->val.status.num == smtperr ) 
-       { 
-               found=1;
-               break;
-       }
-
-    /* if (str_find(&ctl->antispam, smtperr)) */
-    if ( found )
+    if (str_find(&ctl->antispam, smtperr))
     {
        /*
         * SMTP listener explicitly refuses to deliver mail
@@ -648,6 +639,9 @@ int stuffline(struct query *ctl, char *buf)
     int        n, oldphase;
     char *last;
 
+    if (!buf)
+       return -1;
+
     /* The line may contain NUL characters. Find the last char to use
      * -- the real line termination is the sequence "\n\0".
      */
@@ -1129,9 +1123,9 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg,
         */
        nameslen = 0;
        for (idp = msg->recipients; idp; idp = idp->next)
-           if ((idp->val.status.mark == XMIT_ACCEPT))
+           if (idp->val.status.mark == XMIT_ACCEPT)
                nameslen += (strlen(idp->id) + 1);      /* string + ' ' */
-       if ((*good_addresses == 0))
+       if (*good_addresses == 0)
            nameslen = strlen(run.postmaster);
 
        names = (char *)xmalloc(nameslen + 1);  /* account for '\0' */
@@ -1235,7 +1229,10 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg,
      * under all BSDs and Linux)
      */
     orig_uid = getuid();
-    seteuid(ctl->uid);
+    if (seteuid(ctl->uid)) {
+       report(stderr, GT_("Cannot switch effective user id to %ld: %s\n"), (long)ctl->uid, strerror(errno));
+       return PS_IOERR;
+    }
 #endif /* HAVE_SETEUID */
 
     sinkfp = popen(before, "w");
@@ -1244,7 +1241,10 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg,
 
 #ifdef HAVE_SETEUID
     /* this will fail quietly if we didn't start as root */
-    seteuid(orig_uid);
+    if (seteuid(orig_uid)) {
+       report(stderr, GT_("Cannot switch effective user id back to original %ld: %s\n"), (long)orig_uid, strerror(errno));
+       return PS_IOERR;
+    }
 #endif /* HAVE_SETEUID */
 
     if (!sinkfp)
@@ -1389,8 +1389,6 @@ int close_sink(struct query *ctl, struct msgblk *msg, flag forward)
            e = errno;
            sinkfp = (FILE *)NULL;
        }
-       else
-           rc = e = 0;
 
        deal_with_sigchld(); /* Restore SIGCHLD handling to reap zombies */