[virt-tools-list] [virt-bootstrap] [PATCH v4 19/26] Make set_root_password_in_rootfs reusable

Radostin Stoyanov rstoyanov1 at gmail.com
Thu Aug 3 13:13:17 UTC 2017


Split set_root_password_in_rootfs() in two functions to make the code
for setting password hash in the content of shadow file reusable.
---
 src/virtBootstrap/utils.py | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/virtBootstrap/utils.py b/src/virtBootstrap/utils.py
index f83b567..b6c20f3 100644
--- a/src/virtBootstrap/utils.py
+++ b/src/virtBootstrap/utils.py
@@ -432,6 +432,19 @@ def str2float(element):
         return None
 
 
+def set_password_in_shadow_content(shadow_content, password, user='root'):
+    """
+    Find a user the content of shadow file and set a hash of the password.
+    """
+    for index, line in enumerate(shadow_content):
+        if line.startswith(user):
+            line_split = line.split(':')
+            line_split[1] = passlib.hosts.linux_context.hash(password)
+            shadow_content[index] = ':'.join(line_split)
+            break
+    return shadow_content
+
+
 def set_root_password_in_rootfs(rootfs, password):
     """
     Set password on the root user within root filesystem
@@ -445,15 +458,10 @@ def set_root_password_in_rootfs(rootfs, password):
         with open(shadow_file) as orig_file:
             shadow_content = orig_file.read().split('\n')
 
-        for index, line in enumerate(shadow_content):
-            if line.startswith('root'):
-                line_split = line.split(':')
-                line_split[1] = passlib.hosts.linux_context.hash(password)
-                shadow_content[index] = ':'.join(line_split)
-                break
+        new_content = set_password_in_shadow_content(shadow_content, password)
 
         with open(shadow_file, "w") as new_file:
-            new_file.write('\n'.join(shadow_content))
+            new_file.write('\n'.join(new_content))
 
     except Exception:
         raise
-- 
2.13.3




More information about the virt-tools-list mailing list