Skip to content

Commit 154b131

Browse files
try to run
1 parent 443a5ed commit 154b131

File tree

3 files changed

+66
-8
lines changed

3 files changed

+66
-8
lines changed

tarantool/connection.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@
6868
IPROTO_FEATURE_ERROR_EXTENSION,
6969
IPROTO_FEATURE_WATCHERS,
7070
IPROTO_CHUNK,
71+
DEFAULT_AUTH_TYPE,
72+
AUTH_TYPE_CHAP_SHA1,
73+
AUTH_TYPE_PAP_SHA256,
74+
AUTH_TYPES,
7175
)
7276
from tarantool.error import (
7377
Error,
@@ -2802,8 +2806,8 @@ def _get_auth_type(self):
28022806
28032807
:raise: :exc:`~tarantool.error.DatabaseError`
28042808
"""
2805-
if self._client_auth_type == AUTH_TYPE_DEFAULT:
2806-
if self._server_auth_type == AUTH_TYPE_DEFAULT:
2809+
if self._client_auth_type == DEFAULT_AUTH_TYPE:
2810+
if self._server_auth_type == DEFAULT_AUTH_TYPE:
28072811
auth_type = AUTH_TYPE_CHAP_SHA1
28082812
else:
28092813
if self._server_auth_type not in AUTH_TYPES:

tarantool/request.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
REQUEST_TYPE_JOIN,
5252
REQUEST_TYPE_SUBSCRIBE,
5353
REQUEST_TYPE_ID,
54+
AUTH_TYPE_CHAP_SHA1,
55+
AUTH_TYPE_PAP_SHA256,
5456
)
5557
from tarantool.response import (
5658
Response,
@@ -265,7 +267,7 @@ def __init__(self, conn, salt, user, password, auth_type):
265267
hash2 = _hash(sha, (hash1,))
266268
prescramble = _hash(sha, (salt, hash2))
267269
scramble = strxor(hash1, prescramble)
268-
elif auth_type == AUTH_TYPE_CHAP_SHA1:
270+
elif auth_type == AUTH_TYPE_PAP_SHA256:
269271
scramble = password
270272
else:
271273
raise ValueError(f'Unexpected auth_type {auth_type}')

test/suites/test_ssl.py

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
)
88
from tarantool.const import (
99
DEFAULT_TRANSPORT,
10-
SSL_TRANSPORT
10+
SSL_TRANSPORT,
11+
AUTH_TYPE_CHAP_SHA1,
12+
AUTH_TYPE_PAP_SHA256,
1113
)
1214
import tarantool
1315
from .lib.tarantool_server import TarantoolServer
@@ -60,26 +62,34 @@ class SslTestCase:
6062
def __init__(self,
6163
name="",
6264
ok=False,
65+
expected_error=tarantool.error.SslError,
6366
server_transport=SSL_TRANSPORT,
6467
server_key_file=None,
6568
server_cert_file=None,
6669
server_ca_file=None,
6770
server_ciphers=None,
71+
server_auth_type=None,
72+
client_transport=SSL_TRANSPORT,
6873
client_cert_file=None,
6974
client_key_file=None,
7075
client_ca_file=None,
71-
client_ciphers=None):
76+
client_ciphers=None,
77+
client_auth_type=None):
7278
self.name = name
7379
self.ok = ok
80+
self.expected_error = expected_error
7481
self.server_transport = server_transport
7582
self.server_key_file = server_key_file
7683
self.server_cert_file = server_cert_file
7784
self.server_ca_file = server_ca_file
7885
self.server_ciphers = server_ciphers
86+
self.server_auth_type = server_auth_type
87+
self.client_transport = client_transport
7988
self.client_cert_file = client_cert_file
8089
self.client_key_file = client_key_file
8190
self.client_ca_file = client_ca_file
8291
self.client_ciphers = client_ciphers
92+
self.client_auth_type = client_auth_type
8393

8494
# Requirements from Tarantool Enterprise Edition manual:
8595
# https://www.tarantool.io/en/enterprise_doc/security/#configuration
@@ -239,6 +249,35 @@ def __init__(self,
239249
client_cert_file=self.cert_file,
240250
client_ca_file=self.ca_file,
241251
client_ciphers="TLS_AES_128_GCM_SHA256"),
252+
SslTestCase(
253+
name="pap-sha256_auth_no_ssl",
254+
ok=False,
255+
expected_error=tarantool.error.ConfigurationError,
256+
client_auth_type=AUTH_TYPE_PAP_SHA256,
257+
client_transport=DEFAULT_TRANSPORT),
258+
SslTestCase(
259+
name="pap-sha256_auth_client_mismatch",
260+
ok=True,
261+
expected_error=tarantool.error.DatabaseError,
262+
client_auth_type=AUTH_TYPE_CHAP_SHA1,
263+
server_key_file=self.key_file,
264+
server_cert_file=self.cert_file,
265+
server_auth_type=AUTH_TYPE_PAP_SHA256),
266+
SslTestCase(
267+
name="pap-sha256_auth_server_mismatch",
268+
ok=True,
269+
expected_error=tarantool.error.DatabaseError,
270+
client_auth_type=AUTH_TYPE_PAP_SHA256,
271+
server_key_file=self.key_file,
272+
server_cert_file=self.cert_file,
273+
server_auth_type=AUTH_TYPE_CHAP_SHA1),
274+
SslTestCase(
275+
name="pap-sha256_auth",
276+
ok=True,
277+
client_auth_type=AUTH_TYPE_PAP_SHA256,
278+
server_key_file=self.key_file,
279+
server_cert_file=self.cert_file,
280+
server_auth_type=AUTH_TYPE_PAP_SHA256),
242281
]
243282
for t in testcases:
244283
with self.subTest(msg=t.name):
@@ -250,7 +289,8 @@ def __init__(self,
250289
ssl_key_file=t.server_key_file,
251290
ssl_cert_file=t.server_cert_file,
252291
ssl_ca_file=t.server_ca_file,
253-
ssl_ciphers=t.server_ciphers)
292+
ssl_ciphers=t.server_ciphers,
293+
auth_type=t.server_auth_type)
254294
srv.script = 'test/suites/box.lua'
255295
srv.start()
256296
srv.admin("box.schema.create_space('space_1')")
@@ -271,18 +311,19 @@ def __init__(self,
271311
srv.host, srv.args['primary'],
272312
user="test",
273313
password="test",
274-
transport="ssl",
314+
transport=t.client_transport,
275315
ssl_key_file=t.client_key_file,
276316
ssl_cert_file=t.client_cert_file,
277317
ssl_ca_file=t.client_ca_file,
278318
ssl_ciphers=t.client_ciphers,
319+
auth_type=t.client_auth_type,
279320
connection_timeout=0.5,
280321
socket_timeout=0.5)
281322

282323
self.assertEqual(con.insert('space_1', [1])[0], [1])
283324
self.assertEqual(len(con.select('space_1')), 1)
284325
self.assertTrue(t.ok)
285-
except tarantool.error.SslError:
326+
except t.expected_error:
286327
self.assertFalse(t.ok)
287328
finally:
288329
self.stop_srv(srv)
@@ -375,3 +416,14 @@ def test_mesh(self):
375416
servers[i].stop()
376417
finally:
377418
self.stop_mesh(con)
419+
420+
def test_sha_256_client_setting():
421+
srv = TarantoolServer(
422+
transport=t.server_transport,
423+
ssl_key_file=t.server_key_file,
424+
ssl_cert_file=t.server_cert_file,
425+
ssl_ca_file=t.server_ca_file,
426+
ssl_ciphers=t.server_ciphers,
427+
auth_type="pap-sha256")
428+
srv.script = 'test/suites/box.lua'
429+
srv.start()

0 commit comments

Comments
 (0)