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 tempfile
import shutil import shutil
import logging import logging
import fileinput
import re
import sys
from random import Random from random import Random
from time import gmtime from time import gmtime
import os 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] args = ["/usr/bin/ldapmodify", "-h", "127.0.0.1", "-xv", "-D", dn, "-w", pwd, "-f", fd.name]
run(args) 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: class KrbInstance:
def __init__(self): def __init__(self):
self.ds_user = None self.ds_user = None
@ -207,9 +222,7 @@ class KrbInstance:
print "Error timed out waiting for kadmin to finish operations\n" print "Error timed out waiting for kadmin to finish operations\n"
os.exit() os.exit()
cfg_fd = open("/etc/sysconfig/dirsrv", "a") update_key_val_in_file("/etc/sysconfig/dirsrv", "export KRB5_KTNAME", "/etc/dirsrv/ds.keytab")
cfg_fd.write("export KRB5_KTNAME=/etc/dirsrv/ds.keytab\n")
cfg_fd.close()
pent = pwd.getpwnam(self.ds_user) pent = pwd.getpwnam(self.ds_user)
os.chown("/etc/dirsrv/ds.keytab", pent.pw_uid, pent.pw_gid) 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" print "Error timed out waiting for kadmin to finish operations\n"
os.exit() os.exit()
cfg_fd = open("/etc/sysconfig/ipa-kpasswd", "a") update_key_val_in_file("/etc/sysconfig/ipa-kpasswd", "export KRB5_KTNAME", "/var/kerberos/krb5kdc/kpasswd.keytab")
cfg_fd.write("export KRB5_KTNAME=/var/kerberos/krb5kdc/kpasswd.keytab\n")
cfg_fd.close()
pent = pwd.getpwnam(self.ds_user) pent = pwd.getpwnam(self.ds_user)
os.chown("/var/kerberos/krb5kdc/kpasswd.keytab", pent.pw_uid, pent.pw_gid) os.chown("/var/kerberos/krb5kdc/kpasswd.keytab", pent.pw_uid, pent.pw_gid)