diff options
-rw-r--r-- | .DS_Store | bin | 6148 -> 6148 bytes | |||
-rwxr-xr-x | redis/client.py | 27 | ||||
-rw-r--r-- | tests/test_commands.py | 22 |
3 files changed, 30 insertions, 19 deletions
Binary files differ diff --git a/redis/client.py b/redis/client.py index 6072c69..8bb428f 100755 --- a/redis/client.py +++ b/redis/client.py @@ -955,7 +955,8 @@ class Redis(object): def acl_setuser(self, username, enabled=False, nopass=False, add_passwords=None, remove_passwords=None, categories=None, - commands=None, keys=None, reset=False): + add_hashes=None, remove_hashes=None, commands=None, + keys=None, reset=False): """ Create or update an ACL user. @@ -1016,20 +1017,28 @@ class Redis(object): # to be specified as a simple string or a list remove_passwords = list_or_args(remove_passwords, []) for password in remove_passwords: - if len(password) == 64: - pieces.append('!%s' % password) - else: - pieces.append('<%s' % password) + pieces.append('<%s' % password) + + if remove_hashes: + # as most users will have only one password, allow remove_passwords + # to be specified as a simple string or a list + remove_hashes = list_or_args(remove_hashes, []) + for password in remove_hashes: + pieces.append('!%s' % password) if add_passwords: # as most users will have only one password, allow add_passwords # to be specified as a simple string or a list add_passwords = list_or_args(add_passwords, []) for password in add_passwords: - if len(password) == 64: - pieces.append('#%s' % password) - else: - pieces.append('<%s' % password) + pieces.append('>%s' % password) + + if add_hashes: + # as most users will have only one password, allow remove_passwords + # to be specified as a simple string or a list + add_hashes = list_or_args(add_hashes, []) + for password in remove_hashes: + pieces.append('#%s' % password) if nopass: pieces.append(b'nopass') diff --git a/tests/test_commands.py b/tests/test_commands.py index fca5055..017b5af 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -166,22 +166,24 @@ class TestRedisCommands(object): assert r.acl_setuser(username, enabled=True, remove_passwords=['pass2']) assert len(r.acl_getuser(username)['passwords']) == 1 - - # Resets and tests hash value "variable HP" set properly. - HP = '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8' + # Resets and tests that hashed values are set properly. + hashed_password = ('5e884898da28047151d0e56f8dc629' + '2773603d0d6aabbdd62a11ef721d1542d8') assert r.acl_setuser(username, enabled=True, reset=True, - add_passwords=[HP]) - assert acl['passwords'] == [HP] + add_hashes=[hashed_password]) + assert acl['passwords'] == [hashed_password] # test remove_passwords for hash removal assert r.acl_setuser(username, enabled=True, reset=True, - add_passwords=[HP, 'pass1']) + add_hashes=[hashed_password], + add_passwords=['pass1']) assert len(r.acl_getuser(username)['passwords']) == 2 assert r.acl_setuser(username, enabled=True, - remove_passwords=[HP]) + remove_hashes=[hashed_password]) assert len(r.acl_getuser(username)['passwords']) == 1 - @skip_if_server_version_lt('6.0.0') - def test_acl_list(self, r, request): - username = 'redis-py-user' + + @skip_if_server_version_lt('6.0.0') + def test_acl_list(self, r, request): + username = 'redis-py-user' def teardown(): r.acl_deluser(username) |