Mercurial > public > mercurial-scm > hg
comparison mercurial/sslutil.py @ 44888:95903a8d8c97
sslutil: stop returning argument as third return value of protocolsettings()
The third return value was always the same as the argument.
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Sun, 31 May 2020 09:55:45 +0200 |
parents | 7dd63a8cb1ee |
children | ceb7318013d5 |
comparison
equal
deleted
inserted
replaced
44887:61cdc8137d53 | 44888:95903a8d8c97 |
---|---|
129 # We always print a "connection security to %s is disabled..." message when | 129 # We always print a "connection security to %s is disabled..." message when |
130 # --insecure is used. So no need to print anything more here. | 130 # --insecure is used. So no need to print anything more here. |
131 if ui.insecureconnections: | 131 if ui.insecureconnections: |
132 protocol = b'tls1.0' | 132 protocol = b'tls1.0' |
133 | 133 |
134 s[b'protocol'], s[b'ctxoptions'], s[b'protocolui'] = protocolsettings( | 134 s[b'protocolui'] = protocol |
135 protocol | 135 s[b'protocol'], s[b'ctxoptions'] = protocolsettings(protocol) |
136 ) | |
137 | 136 |
138 ciphers = ui.config(b'hostsecurity', b'ciphers') | 137 ciphers = ui.config(b'hostsecurity', b'ciphers') |
139 ciphers = ui.config(b'hostsecurity', b'%s:ciphers' % bhostname, ciphers) | 138 ciphers = ui.config(b'hostsecurity', b'%s:ciphers' % bhostname, ciphers) |
140 s[b'ciphers'] = ciphers | 139 s[b'ciphers'] = ciphers |
141 | 140 |
243 | 242 |
244 | 243 |
245 def protocolsettings(protocol): | 244 def protocolsettings(protocol): |
246 """Resolve the protocol for a config value. | 245 """Resolve the protocol for a config value. |
247 | 246 |
248 Returns a 3-tuple of (protocol, options, ui value) where the first | 247 Returns a tuple of (protocol, options) which are values used by SSLContext. |
249 2 items are values used by SSLContext and the last is a string value | |
250 of the ``minimumprotocol`` config option equivalent. | |
251 """ | 248 """ |
252 if protocol not in configprotocols: | 249 if protocol not in configprotocols: |
253 raise ValueError(b'protocol value not supported: %s' % protocol) | 250 raise ValueError(b'protocol value not supported: %s' % protocol) |
254 | 251 |
255 # Despite its name, PROTOCOL_SSLv23 selects the highest protocol | 252 # Despite its name, PROTOCOL_SSLv23 selects the highest protocol |
270 b'upgrade Python or disable setting since ' | 267 b'upgrade Python or disable setting since ' |
271 b'only TLS 1.0 is supported' | 268 b'only TLS 1.0 is supported' |
272 ), | 269 ), |
273 ) | 270 ) |
274 | 271 |
275 return ssl.PROTOCOL_TLSv1, 0, b'tls1.0' | 272 return ssl.PROTOCOL_TLSv1, 0 |
276 | 273 |
277 # SSLv2 and SSLv3 are broken. We ban them outright. | 274 # SSLv2 and SSLv3 are broken. We ban them outright. |
278 options = ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 | 275 options = ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 |
279 | 276 |
280 if protocol == b'tls1.0': | 277 if protocol == b'tls1.0': |
289 | 286 |
290 # Prevent CRIME. | 287 # Prevent CRIME. |
291 # There is no guarantee this attribute is defined on the module. | 288 # There is no guarantee this attribute is defined on the module. |
292 options |= getattr(ssl, 'OP_NO_COMPRESSION', 0) | 289 options |= getattr(ssl, 'OP_NO_COMPRESSION', 0) |
293 | 290 |
294 return ssl.PROTOCOL_SSLv23, options, protocol | 291 return ssl.PROTOCOL_SSLv23, options |
295 | 292 |
296 | 293 |
297 def wrapsocket(sock, keyfile, certfile, ui, serverhostname=None): | 294 def wrapsocket(sock, keyfile, certfile, ui, serverhostname=None): |
298 """Add SSL/TLS to a socket. | 295 """Add SSL/TLS to a socket. |
299 | 296 |
541 if f and not os.path.exists(f): | 538 if f and not os.path.exists(f): |
542 raise error.Abort( | 539 raise error.Abort( |
543 _(b'referenced certificate file (%s) does not exist') % f | 540 _(b'referenced certificate file (%s) does not exist') % f |
544 ) | 541 ) |
545 | 542 |
546 protocol, options, _protocolui = protocolsettings(b'tls1.0') | 543 protocol, options = protocolsettings(b'tls1.0') |
547 | 544 |
548 # This config option is intended for use in tests only. It is a giant | 545 # This config option is intended for use in tests only. It is a giant |
549 # footgun to kill security. Don't define it. | 546 # footgun to kill security. Don't define it. |
550 exactprotocol = ui.config(b'devel', b'serverexactprotocol') | 547 exactprotocol = ui.config(b'devel', b'serverexactprotocol') |
551 if exactprotocol == b'tls1.0': | 548 if exactprotocol == b'tls1.0': |