[PATCH v2] mail: retain hostname for sslutil.wrapsocket (issue5203)

Pierre-Yves David pierre-yves.david at ens-lyon.org
Fri Apr 15 20:38:13 EDT 2016


Looks good to me, pushed.
Thanks for fixing this.

On 04/15/2016 02:18 PM, timeless wrote:
> # HG changeset patch
> # User timeless <timeless at mozdev.org>
> # Date 1460742227 0
> #      Fri Apr 15 17:43:47 2016 +0000
> # Node ID 0ae265320d1d7f97525ec746d6fc955bb95ac9f0
> # Parent  531dea16f4f754fd76e2f6434662b7dc154e704a
> # Available At bb://timeless/mercurial-crew
> #              hg pull bb://timeless/mercurial-crew -r 0ae265320d1d
> mail: retain hostname for sslutil.wrapsocket (issue5203)
>
> SMTPS + STARTTLS need to provide serverhostname,
> and we can't store it in sslkwargs because that breaks
> something involving the https protocol.
>
> diff -r 531dea16f4f7 -r 0ae265320d1d mercurial/mail.py
> --- a/mercurial/mail.py	Tue Apr 12 14:43:36 2016 +0000
> +++ b/mercurial/mail.py	Fri Apr 15 17:43:47 2016 +0000
> @@ -48,9 +48,10 @@
>   
>       This class allows to pass any keyword arguments to SSL socket creation.
>       '''
> -    def __init__(self, sslkwargs, **kwargs):
> +    def __init__(self, sslkwargs, host=None, **kwargs):
>           smtplib.SMTP.__init__(self, **kwargs)
>           self._sslkwargs = sslkwargs
> +        self._host = host
>   
>       def starttls(self, keyfile=None, certfile=None):
>           if not self.has_extn("starttls"):
> @@ -59,6 +60,7 @@
>           (resp, reply) = self.docmd("STARTTLS")
>           if resp == 220:
>               self.sock = sslutil.wrapsocket(self.sock, keyfile, certfile,
> +                                           serverhostname=self._host,
>                                              **self._sslkwargs)
>               self.file = smtplib.SSLFakeFile(self.sock)
>               self.helo_resp = None
> @@ -72,10 +74,12 @@
>   
>       This class allows to pass any keyword arguments to SSL socket creation.
>       '''
> -    def __init__(self, sslkwargs, keyfile=None, certfile=None, **kwargs):
> +    def __init__(self, sslkwargs, keyfile=None, certfile=None, host=None,
> +                 **kwargs):
>           self.keyfile = keyfile
>           self.certfile = certfile
>           smtplib.SMTP.__init__(self, **kwargs)
> +        self._host = host
>           self.default_port = smtplib.SMTP_SSL_PORT
>           self._sslkwargs = sslkwargs
>   
> @@ -85,6 +89,7 @@
>           new_socket = socket.create_connection((host, port), timeout)
>           new_socket = sslutil.wrapsocket(new_socket,
>                                           self.keyfile, self.certfile,
> +                                        serverhostname=self._host,
>                                           **self._sslkwargs)
>           self.file = smtplib.SSLFakeFile(new_socket)
>           return new_socket
> @@ -114,9 +119,9 @@
>           sslkwargs = {'ui': ui}
>       if smtps:
>           ui.note(_('(using smtps)\n'))
> -        s = SMTPS(sslkwargs, local_hostname=local_hostname)
> +        s = SMTPS(sslkwargs, local_hostname=local_hostname, host=mailhost)
>       elif starttls:
> -        s = STARTTLS(sslkwargs, local_hostname=local_hostname)
> +        s = STARTTLS(sslkwargs, local_hostname=local_hostname, host=mailhost)
>       else:
>           s = smtplib.SMTP(local_hostname=local_hostname)
>       if smtps:
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list