On 10/4/07, Rob Crittenden <rcritten@redhat.com> wrote:

> William Jon McCann wrote:
> > Hi,
> >
> > After playing with the install (repeatedly) I ended up with a lot of
> > duplicate values in:
> > /etc/sysconfig/dirsrv
> > /etc/sysconfig/ipa-kpasswd
> >
> > Here is a patch that should fix this.  It modifies the file "in-place"
> > and removes lines that matching the key (or commented key) and then
> > appends the new key=value.
> >
> > Jon
>
> Cool, I've wanted to fix this for a while (and recently aborted a switch
> from open with "a" to "w").
>
> What happens if the file doesn't exist yet? Do we need to wrap the
> fileinput loop in either a try/except or just look to see if the file
> exists first (my vote)?
>
> Something like:
>
> def update_key_val_in_file(filename, key, val):
>      if os.path.exists(filename):
>          pattern = "^[\s#]*%s\s*=" % re.escape(key)
>          p = re.compile(pattern)
>          for line in fileinput.input(filename, inplace=1):
>              if not p.search(line):
>                  sys.stdout.write(line)
>          fileinput.close()
>      f = open(filename, "a")
>      f.write("%s=%s\n" % (key, val))
>      f.close()

Good point.  In genera,l I prefer doing a try because it is a little
less racy but in this case it doesn't make a difference.

Updated patch attached.

Thanks,
Jon
This commit is contained in:
Karl MacMillan 0001-01-01 00:00:00 +00:00
parent d5fedb5f97
commit cfaa18a1cf

View File

@ -23,6 +23,9 @@ import string
import tempfile
import shutil
import logging
import fileinput
import re
import sys
from random import Random
from time import gmtime
import os
@ -48,6 +51,18 @@ def ldap_mod(fd, dn, pwd):
args = ["/usr/bin/ldapmodify", "-h", "127.0.0.1", "-xv", "-D", dn, "-w", pwd, "-f", fd.name]
run(args)
def update_key_val_in_file(filename, key, val):
if os.path.exists(filename):
pattern = "^[\s#]*%s\s*=" % re.escape(key)
p = re.compile(pattern)
for line in fileinput.input(filename, inplace=1):
if not p.search(line):
sys.stdout.write(line)
fileinput.close()
f = open(filename, "a")
f.write("%s=%s\n" % (key, val))
f.close()
class KrbInstance:
def __init__(self):
self.ds_user = None
@ -207,9 +222,7 @@ class KrbInstance:
print "Error timed out waiting for kadmin to finish operations\n"
os.exit()
cfg_fd = open("/etc/sysconfig/dirsrv", "a")
cfg_fd.write("export KRB5_KTNAME=/etc/dirsrv/ds.keytab\n")
cfg_fd.close()
update_key_val_in_file("/etc/sysconfig/dirsrv", "export KRB5_KTNAME", "/etc/dirsrv/ds.keytab")
pent = pwd.getpwnam(self.ds_user)
os.chown("/etc/dirsrv/ds.keytab", pent.pw_uid, pent.pw_gid)
@ -237,9 +250,7 @@ class KrbInstance:
print "Error timed out waiting for kadmin to finish operations\n"
os.exit()
cfg_fd = open("/etc/sysconfig/ipa-kpasswd", "a")
cfg_fd.write("export KRB5_KTNAME=/var/kerberos/krb5kdc/kpasswd.keytab\n")
cfg_fd.close()
update_key_val_in_file("/etc/sysconfig/ipa-kpasswd", "export KRB5_KTNAME", "/var/kerberos/krb5kdc/kpasswd.keytab")
pent = pwd.getpwnam(self.ds_user)
os.chown("/var/kerberos/krb5kdc/kpasswd.keytab", pent.pw_uid, pent.pw_gid)