]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: delete EOF when reading passwords from file 39362/head
authorAlfonso Martínez <almartin@redhat.com>
Tue, 9 Feb 2021 10:17:52 +0000 (11:17 +0100)
committerAlfonso Martínez <almartin@redhat.com>
Tue, 9 Feb 2021 10:17:52 +0000 (11:17 +0100)
Signed-off-by: Alfonso Martínez <almartin@redhat.com>
src/pybind/mgr/dashboard/tests/test_access_control.py
src/pybind/mgr/mgr_module.py

index ba0db6b159015be71e3c51c887b7855dcde70bb7..622880d8369d38d5d5bc15c7bcfae30b7742f838 100644 (file)
@@ -581,6 +581,18 @@ class AccessControlTest(unittest.TestCase, CLICommandTestMixin):
                                       'admin@user.com')
         self.assertGreaterEqual(user['lastUpdate'], user_orig['lastUpdate'])
 
+    def test_sanitize_password(self):
+        self.test_create_user()
+        password = 'myPass\\n\\r\\n'
+        with open('/tmp/test_sanitize_password.txt', 'w+') as pwd_file:
+            # Add new line separators (like some text editors when a file is saved).
+            pwd_file.write('{}{}'.format(password, '\n\r\n\n'))
+            pwd_file.seek(0)
+            user = self.exec_cmd('ac-user-set-password', username='admin',
+                                 inbuf=pwd_file.read(), force_password=True)
+            pass_hash = password_hash(password, user['password'])
+            self.assertEqual(user['password'], pass_hash)
+
     def test_set_user_password_nonexistent_user(self):
         with self.assertRaises(CmdException) as ctx:
             self.exec_cmd('ac-user-set-password', username='admin',
index 37acf88e3a60a0911928dd0acb48a2bf50ac0a1c..8d52243f503516c6ce4263d6ea244548539c0c71 100644 (file)
@@ -414,8 +414,10 @@ def CLICheckNonemptyFileInput(func: HandlerFuncType) -> HandlerFuncType:
     def check(*args: Any, **kwargs: Any) -> Tuple[int, str, str]:
         if 'inbuf' not in kwargs:
             return -errno.EINVAL, '', ERROR_MSG_NO_INPUT_FILE
-        if not kwargs['inbuf'] or (isinstance(kwargs['inbuf'], str)
-                                   and not kwargs['inbuf'].strip('\n')):
+        if isinstance(kwargs['inbuf'], str):
+            # Delete new line separator at EOF (it may have been added by a text editor).
+            kwargs['inbuf'] = kwargs['inbuf'].rstrip('\r\n').rstrip('\n')
+        if not kwargs['inbuf']:
             return -errno.EINVAL, '', ERROR_MSG_EMPTY_INPUT_FILE
         return func(*args, **kwargs)
     check.__signature__ = inspect.signature(func)  # type: ignore[attr-defined]