Thanks for the quick response.  I added the check with the outside if():

--- postfix-2.6.6-orig/src/smtpd/smtpd.c  2015-01-28 12:24:49.000000000 -0500
+++ postfix-2.6.6/src/smtpd/smtpd.c 2015-01-28 15:25:06.000000000 -0500
@@ -3592,8 +3592,18 @@ static int xclient_cmd(SMTPD_STATE *stat
  state->protocol = mystrdup(MAIL_PROTO_SMTP);
     }
 #ifdef USE_SASL_AUTH
-    if (smtpd_sasl_is_active(state))
+    if (smtpd_sasl_is_active(state)) {
  smtpd_sasl_auth_reset(state);
+    smtpd_sasl_deactivate(state);
+    }
+    if ((smtpd_sasl_is_active(state) == 0) && var_smtpd_sasl_enable) { 
+        if (state->tls_context == 0)
+            smtpd_sasl_activate(state, VAR_SMTPD_SASL_OPTS, 
+                                var_smtpd_sasl_opts);
+        else
+            smtpd_sasl_activate(state, VAR_SMTPD_SASL_TLS_OPTS, 
+                                var_smtpd_sasl_tls_opts);
+    }
 #endif
     chat_reset(state, 0);
     mail_reset(state);


..and..

--- postfix-2.11.3-orig/src/smtpd/smtpd.c 2015-01-28 13:02:48.494510734 -0500
+++ postfix-2.11.3/src/smtpd/smtpd.c  2015-01-28 15:30:12.548604676 -0500
@@ -3851,7 +3851,19 @@ static int xclient_cmd(SMTPD_STATE *stat
     }
 #ifdef USE_SASL_AUTH
     if (got_login == 0)
- smtpd_sasl_auth_reset(state);
+        smtpd_sasl_auth_reset(state);
+    if (smtpd_sasl_is_active(state)) {
+        smtpd_sasl_auth_reset(state);
+        smtpd_sasl_deactivate(state);
+    }
+    if ((smtpd_sasl_is_active(state) == 0) && var_smtpd_sasl_enable) {
+        if (state->tls_context == 0)
+            smtpd_sasl_activate(state, VAR_SMTPD_SASL_OPTS,
+                                var_smtpd_sasl_opts);
+        else
+            smtpd_sasl_activate(state, VAR_SMTPD_SASL_TLS_OPTS,
+                                var_smtpd_sasl_tls_opts);
+    }
 #endif
     chat_reset(state, 0);
     mail_reset(state);


Thanks, Matthew

On 15:08 Wed 28 Jan     , Wietse Venema wrote:
> Matthew Via:
> > We use postfix with dovecot as a sasl backend, and have run into a small
> > issue with the XCLIENT extension and SASL.  smtpd_sasl_activate is
> > called only upon the initial connection to smtpd, and that sets the sasl
> > structure to using the socket's remote ip address.  When XCLIENT is
> > used, a new ip address is specified but the sasl structure is not
> > updated.  The logic appears to be correct with the STARTTLS command, so
> > I applied similar logic to the XCLIENT command in postfix 2.6.6, since 
> > that is what we're using currently.
> 
> You need to guard the smtpd_sasl_activate() calls with 
> "if (smtpd_sasl_enable)".
> 
>       Wietse
> 
> > --- postfix-2.6.6-orig/src/smtpd/smtpd.c  2015-01-28 12:24:49.000000000 
> > -0500
> > +++ postfix-2.6.6/src/smtpd/smtpd.c 2015-01-28 12:30:30.000000000 -0500
> > @@ -3592,8 +3592,18 @@ static int xclient_cmd(SMTPD_STATE *stat
> >   state->protocol = mystrdup(MAIL_PROTO_SMTP);
> >      }
> >  #ifdef USE_SASL_AUTH
> > -    if (smtpd_sasl_is_active(state))
> > +    if (smtpd_sasl_is_active(state)) {
> >   smtpd_sasl_auth_reset(state);
> > +    smtpd_sasl_deactivate(state);
> > +    }
> > +    if (smtpd_sasl_is_active(state) == 0) { 
> > +        if (state->tls_context == 0)
> > +            smtpd_sasl_activate(state, VAR_SMTPD_SASL_OPTS, 
> > +                                var_smtpd_sasl_opts);
> > +        else
> > +            smtpd_sasl_activate(state, VAR_SMTPD_SASL_TLS_OPTS, 
> > +                                var_smtpd_sasl_tls_opts);
> > +    }
> >  #endif
> >      chat_reset(state, 0);
> >      mail_reset(state);
> > 
> > 
> > Does this look like the correct way to handle it? It does fix the issue
> > and dovecot logs the correct XCLIENT-provided address, for both TLS
> > and plain.
> > 
> > I moved this to the latest 2.11.3 for submission, but this probably 
> > needs to be fixed, I'm not 100% sure about the got_login logic, so 
> > I left it alone.
> > 
> > --- postfix-2.11.3-orig/src/smtpd/smtpd.c 2015-01-28 13:02:48.494510734 
> > -0500
> > +++ postfix-2.11.3/src/smtpd/smtpd.c  2015-01-28 13:48:32.050175395 -0500
> > @@ -3851,7 +3851,19 @@ static int xclient_cmd(SMTPD_STATE *stat
> >      }
> >  #ifdef USE_SASL_AUTH
> >      if (got_login == 0)
> > - smtpd_sasl_auth_reset(state);
> > +        smtpd_sasl_auth_reset(state);
> > +    if (smtpd_sasl_is_active(state)) {
> > +        smtpd_sasl_auth_reset(state);
> > +        smtpd_sasl_deactivate(state);
> > +    }
> > +    if (smtpd_sasl_is_active(state) == 0) {
> > +        if (state->tls_context == 0)
> > +            smtpd_sasl_activate(state, VAR_SMTPD_SASL_OPTS,
> > +                                var_smtpd_sasl_opts);
> > +        else
> > +            smtpd_sasl_activate(state, VAR_SMTPD_SASL_TLS_OPTS,
> > +                                var_smtpd_sasl_tls_opts);
> > +    }
> >  #endif
> >      chat_reset(state, 0);
> >      mail_reset(state);
> > 
> > 
> > Thank you,
> > Matthew
> -- End of PGP section, PGP failed!

Attachment: pgpd_140TX0qc.pgp
Description: PGP signature

Reply via email to