Re: lmtpd segfaults after update to 2.4.19, seems it wants to act as proxy

ellie timoney <[email protected]>
Newsgroups gmane.mail.imap.cyrus
Message-ID <[email protected]>
On Wed, May 24, 2017, at 04:17 PM, Don Lewis wrote:
> This first version of the patch worked for me.  A problem with
> 
> the second version of the patch is that mlookup() gets called in
> 
> a bunch of different places and the server variable would need
> 
> to be initialized in all of them.  In verify_user(), mlookup is called
> 
> several times, so server would have to be set to NULL before
> 
> each call.
> 
> 

Oh, good catch, I didn't look for other occurrences.  

Attached is an updated version of my patch that initialises these
variables correctly.

Cheers,

ellie

----
Cyrus Home Page: http://www.cyrusimap.org/
List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
To Unsubscribe:
https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus
cyrus-imapd-2.4.19-simon-lmtpd-segfault-v2.patch (text/x-diff, 1.2 KB)
diff --git a/imap/lmtpd.c b/imap/lmtpd.c
index 5fe507a..7428f72 100644
--- a/imap/lmtpd.c
+++ b/imap/lmtpd.c
@@ -712,9 +712,10 @@ int deliver(message_data_t *msgdata, char *authuser,
 
     /* loop through each recipient, attempting delivery for each */
     for (n = 0; n < nrcpts; n++) {
-	char namebuf[MAX_MAILBOX_BUFFER] = "", *server;
+	char namebuf[MAX_MAILBOX_BUFFER] = "";
 	char userbuf[MAX_MAILBOX_BUFFER];
 	const char *rcpt, *user, *domain, *mailbox;
+	char *server = NULL;
 	int r = 0;
 
 	rcpt = msg_getrcptall(msgdata, n);
@@ -954,7 +955,7 @@ static int verify_user(const char *user, const char *domain, char *mailbox,
     }
 
     if (!r) {
-	char *server, *acl;
+	char *server = NULL, *acl = NULL;
 	long aclcheck = !user ? ACL_POST : 0;
 	/*
 	 * check to see if mailbox exists and we can append to it:
@@ -1061,8 +1062,9 @@ FILE *spoolfile(message_data_t *msgdata)
        (don't bother if we're only a proxy) */
     n = isproxy ? 0 : msg_getnumrcpt(msgdata);
     for (i = 0; !f && (i < n); i++) {
-	char namebuf[MAX_MAILBOX_BUFFER] = "", *server;
+	char namebuf[MAX_MAILBOX_BUFFER] = "";
 	const char *user, *domain, *mailbox;
+	char *server = NULL;
 	int r;
 
 	/* build the mailboxname from the recipient address */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.