diff options
author | David Kupka <dkupka@redhat.com> | 2014-10-22 09:07:44 -0400 |
---|---|---|
committer | Martin Kosek <mkosek@redhat.com> | 2014-11-05 15:22:51 +0100 |
commit | 364d466fd7def3589ddb9e4a9f8d73fc2df80439 (patch) | |
tree | 6a453eae45f12c1aa496ae20ade51eb7f35c5e1a /ipaplatform/base/tasks.py | |
parent | 0b08043c37210d0f86cb0c66d659acafda0fb529 (diff) | |
download | freeipa-364d466fd7def3589ddb9e4a9f8d73fc2df80439.tar.gz freeipa-364d466fd7def3589ddb9e4a9f8d73fc2df80439.tar.xz freeipa-364d466fd7def3589ddb9e4a9f8d73fc2df80439.zip |
Respect UID and GID soft static allocation.
https://fedoraproject.org/wiki/Packaging:UsersAndGroups?rd=Packaging/UsersAndGroups#Soft_static_allocation
https://fedorahosted.org/freeipa/ticket/4585
Reviewed-By: Martin Basti <mbasti@redhat.com>
Diffstat (limited to 'ipaplatform/base/tasks.py')
-rw-r--r-- | ipaplatform/base/tasks.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/ipaplatform/base/tasks.py b/ipaplatform/base/tasks.py index 408447e43..f2ba81f44 100644 --- a/ipaplatform/base/tasks.py +++ b/ipaplatform/base/tasks.py @@ -22,7 +22,13 @@ This module contains default platform-specific implementations of system tasks. ''' +import pwd +import grp from ipaplatform.paths import paths +from ipapython.ipa_log_manager import log_mgr +from ipapython import ipautil + +log = log_mgr.get_logger(__name__) class BaseTaskNamespace(object): @@ -150,5 +156,47 @@ class BaseTaskNamespace(object): return + def create_system_user(self, name, group, homedir, shell, uid = None, gid = None, comment = None): + """Create a system user with a corresponding group""" + try: + grp.getgrnam(group) + except KeyError: + log.debug('Adding group %s', group) + args = [paths.GROUPADD, '-r', group] + if gid: + args += ['-g', str(gid)] + try: + ipautil.run(args) + log.debug('Done adding group') + except ipautil.CalledProcessError as e: + log.critical('Failed to add group: %s', e) + raise + else: + log.debug('group %s exists', group) + + try: + pwd.getpwnam(name) + except KeyError: + log.debug('Adding user %s', name) + args = [ + paths.USERADD, + '-g', group, + '-d', homedir, + '-s', shell, + '-M', '-r', name, + ] + if uid: + args += ['-u', str(uid)] + if comment: + args += ['-c', comment] + try: + ipautil.run(args) + log.debug('Done adding user') + except ipautil.CalledProcessError as e: + log.critical('Failed to add user: %s', e) + raise + else: + log.debug('user %s exists', name) + task_namespace = BaseTaskNamespace() |