Hi,

the attached patch fixes <https://fedorahosted.org/freeipa/ticket/4373>.

Honza

--
Jan Cholasta
>From c933fa17a556ccc7ce142f81c6d6aaac15d0931d Mon Sep 17 00:00:00 2001
From: Jan Cholasta <jchol...@redhat.com>
Date: Wed, 18 Jun 2014 15:26:17 +0200
Subject: [PATCH] Do not corrupt sshd_config in client install when trailing
 newline is missing.

https://fedorahosted.org/freeipa/ticket/4373
---
 ipa-client/ipa-install/ipa-client-install | 42 +++++++++++++------------------
 1 file changed, 17 insertions(+), 25 deletions(-)

diff --git a/ipa-client/ipa-install/ipa-client-install b/ipa-client/ipa-install/ipa-client-install
index c20ad1a..307b593 100755
--- a/ipa-client/ipa-install/ipa-client-install
+++ b/ipa-client/ipa-install/ipa-client-install
@@ -1259,7 +1259,7 @@ def configure_sssd_conf(fstore, cli_realm, cli_domain, cli_server, options, clie
     return 0
 
 def change_ssh_config(filename, changes, sections):
-    if len(changes) == 0:
+    if not changes:
         return True
 
     try:
@@ -1268,38 +1268,30 @@ def change_ssh_config(filename, changes, sections):
         root_logger.error("Failed to open '%s': %s", filename, str(e))
         return False
 
+    change_keys = tuple(key.lower() for key in changes)
+    section_keys = tuple(key.lower() for key in sections)
+
     lines = []
-    in_section = False
     for line in f:
-        if in_section:
-            lines.append(line)
-            continue
+        line = line.rstrip('\n')
         pline = line.strip()
-        if len(pline) == 0 or pline.startswith('#'):
+        if not pline or pline.startswith('#'):
             lines.append(line)
             continue
-        parts = pline.split()
-        option = parts[0].lower()
-        for key in sections:
-            if key.lower() == option:
-                in_section = True
-                break
-        if in_section:
-            break
-        for opt in changes:
-            if opt.lower() == option:
-                line = None
-                break
-        if line is not None:
+        option = pline.split()[0].lower()
+        if option in section_keys:
             lines.append(line)
-    for opt in changes:
-        if changes[opt] is not None:
-            lines.append('%s %s\n' % (opt, changes[opt]))
-    lines.append('\n')
-    if in_section:
+            break
+        if option in change_keys:
+            line = '#' + line
         lines.append(line)
+    for option, value in changes.items():
+        if value is not None:
+            lines.append('%s %s' % (option, value))
     for line in f:
+        line = line.rstrip('\n')
         lines.append(line)
+    lines.append('')
 
     f.close()
 
@@ -1309,7 +1301,7 @@ def change_ssh_config(filename, changes, sections):
         root_logger.error("Failed to open '%s': %s", filename, str(e))
         return False
 
-    f.write(''.join(lines))
+    f.write('\n'.join(lines))
 
     f.close()
 
-- 
1.9.0

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to