On Sat, May 20, 2017, at 05:59 PM, Simon Matter wrote:
> > This is the point where the wrong path is taken.
> >
> >
> > r = mlookup(namebuf, &server, NULL, NULL);
> > if (!r && server) {
> >      /* remote mailbox */
> >      proxy_adddest(&dlist, rcpt, n, server, authuser);
> >      status[n] = nosieve;
> > }
> >
> > mlookup did return something that is not 0, and server has not been set
> > in mlookup. In 2.4.17 there has was "if (server) *server = NULL;"
> 
> Hi Michael,
> 
> Thanks a lot for pointing me into the right direction. Indeed attached
> patch makes it work for me.
> 
> I don't know if this is the proper fix for the issue. Hopefully someone
> who knows better than me can comment.
> 
> Regards,
> Simon

Hi,

Thanks Simon and Michael for the sleuthing!

I've attached what I think is a better patch -- it makes sure the server
variable is correctly initialised to NULL, and mlookup() keeps the
idiomatic implementation whereby it only touches the output variable if
it succeeds.

Are you able to confirm if this patch also fixes the issue for you?  I
don't have a 2.4 environment to test this on

Cheers,

ellie
diff --git a/imap/lmtpd.c b/imap/lmtpd.c
index 5fe507a..8a84248 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);
----
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

Reply via email to