diff options
author | Chris Lumens <clumens@redhat.com> | 2009-07-01 13:31:47 -0400 |
---|---|---|
committer | Chris Lumens <clumens@redhat.com> | 2009-07-02 09:52:32 -0400 |
commit | ac59ddaeaa3f89774ffde2a6abe5db757d94ba45 (patch) | |
tree | fa27af935def4dd3c8e355f7e9aae4c0efd72e3a | |
parent | 8b2477c29748728f883b37a3fd62ce9fa43e5d98 (diff) | |
download | anaconda-ac59ddaeaa3f89774ffde2a6abe5db757d94ba45.tar.gz anaconda-ac59ddaeaa3f89774ffde2a6abe5db757d94ba45.tar.xz anaconda-ac59ddaeaa3f89774ffde2a6abe5db757d94ba45.zip |
Allow creating new groups through kickstart.
This is executed before users are created, so new users may be added to
the new groups immediately.
-rw-r--r-- | instdata.py | 6 | ||||
-rw-r--r-- | kickstart.py | 1 | ||||
-rw-r--r-- | users.py | 35 |
3 files changed, 42 insertions, 0 deletions
diff --git a/instdata.py b/instdata.py index 07984d5be..7e441772d 100644 --- a/instdata.py +++ b/instdata.py @@ -182,6 +182,12 @@ class InstallData: stdout="/dev/tty5", stderr="/dev/tty5", root=self.anaconda.rootPath) + for gd in self.ksdata.group.groupList: + if not self.users.createGroup(name=gd.name, + gid=gd.gid, + root=self.anaconda.rootPath): + log.error("Group %s already exists, not creating." % gd.name) + for ud in self.ksdata.user.userList: if not self.users.createUser(name=ud.name, password=ud.password, diff --git a/kickstart.py b/kickstart.py index ce9985525..5147fa5c2 100644 --- a/kickstart.py +++ b/kickstart.py @@ -985,6 +985,7 @@ commandMap = { "firewall": Firewall, "firstboot": Firstboot, "graphical": commands.displaymode.FC3_DisplayMode, + "group": commands.group.F12_Group, "halt": Reboot, "harddrive": commands.method.FC6_Method, "ignoredisk": IgnoreDisk, @@ -84,6 +84,41 @@ class Users: def __init__ (self): self.admin = libuser.admin() + def createGroup (self, name=None, gid=None, root="/mnt/sysimage"): + childpid = os.fork() + + if not childpid: + os.chroot(root) + + del(os.environ["LIBUSER_CONF"]) + self.admin = libuser.admin() + + try: + if self.admin.lookupGroupByName(name): + os._exit(1) + + groupEnt = self.admin.initGroup(name) + + if gid >= 0: + groupEnt.set(libuser.GIDNUMBER, gid) + + self.admin.addGroup(groupEnt) + os._exit(0) + except Exception, e: + log.critical("Error when creating new group: %s" % str(e)) + os._exit(1) + + try: + (pid, status) = os.waitpid(childpid, 0) + except OSError as e: + log.critical("exception from waitpid while creating a group: %s %s" % (e.errno, e.strerror)) + return False + + if os.WIFEXITED(status) and (os.WEXITSTATUS(status) == 0): + return True + else: + return False + def createUser (self, name=None, password=None, isCrypted=False, groups=[], homedir=None, shell=None, uid=None, algo=None, lock=False, root="/mnt/sysimage"): |