Only use $2y$ BCrypt hash type markers
authorSybren A. Stüvel <sybren@stuvel.eu>
Wed, 8 Nov 2017 09:36:02 +0000 (10:36 +0100)
committerSybren A. Stüvel <sybren@stuvel.eu>
Wed, 8 Nov 2017 09:36:02 +0000 (10:36 +0100)
The contents of $2a$, $2b$ and $2y$ are exactly the same, but $2y$
indicates that certain bugs from the past have been fixed. Since these bugs
were never in the Python implementation of BCrypt, we don't care. However,
Apache only accepts $2y$ in its htpasswd file.

svnman/remote.py

index e299769..4683728 100644 (file)
@@ -97,8 +97,16 @@ class API:
         :param revoke: list of usernames.
         """
 
+        # Replace the hash type indicator, as Apache only gets BCrypt
+        # when using the 2y marker.
+        def changehash(p):
+            if p[:4] in {'$2a$', '$2b$'}:
+                return f'$2y${p[4:]}'
+            return p
+
         self._log.info('Modifying access rules for repository %r', repo_id)
-        grants = [{'username': u, 'password': p} for u, p in grant]
+        grants = [{'username': u,
+                   'password': changehash(p)} for u, p in grant]
 
         resp = self._request('POST', f'repo/{repo_id}/access', json={
             'grant': grants,