summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipapython/ipautil.py4
-rw-r--r--ipapython/platform/redhat.py16
2 files changed, 16 insertions, 4 deletions
diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py
index bed5435b..1b059776 100644
--- a/ipapython/ipautil.py
+++ b/ipapython/ipautil.py
@@ -991,13 +991,15 @@ $)''', re.VERBOSE)
return old_values
-def backup_config_and_replace_variables(fstore, filepath, replacevars=dict(), appendvars=dict()):
+def backup_config_and_replace_variables(
+ fstore, filepath, replacevars=dict(), appendvars=dict()):
"""
Take a key=value based configuration file, back up it, and
write new version with certain values replaced or appended
All (key,value) pairs from replacevars and appendvars that
were not found in the configuration file, will be added there.
+ The file must exist before this function is called.
It is responsibility of a caller to ensure that replacevars and
appendvars do not overlap.
diff --git a/ipapython/platform/redhat.py b/ipapython/platform/redhat.py
index d3c23ab0..3f35cfcc 100644
--- a/ipapython/platform/redhat.py
+++ b/ipapython/platform/redhat.py
@@ -24,6 +24,8 @@ import os
import stat
import sys
import socket
+import stat
+
from ipapython import ipautil
from ipapython.platform import base
from ipalib import api
@@ -187,10 +189,18 @@ def backup_and_replace_hostname(fstore, statestore, hostname):
except ipautil.CalledProcessError, e:
print >>sys.stderr, "Failed to set this machine hostname to %s (%s)." % (hostname, str(e))
replacevars = {'HOSTNAME':hostname}
- old_values = ipautil.backup_config_and_replace_variables(fstore,
- "/etc/sysconfig/network",
- replacevars=replacevars)
+
+ filepath = '/etc/sysconfig/network'
+ if not os.path.exists(filepath):
+ # file doesn't exist; create it with correct ownership & mode
+ open(filepath, 'a').close()
+ os.chmod(filepath,
+ stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
+ os.chown(filepath, 0, 0)
+ old_values = ipautil.backup_config_and_replace_variables(
+ fstore, filepath, replacevars=replacevars)
restore_context("/etc/sysconfig/network")
+
if 'HOSTNAME' in old_values:
statestore.backup_state('network', 'hostname', old_values['HOSTNAME'])
else: