summaryrefslogtreecommitdiffstats
path: root/ipaplatform/base/tasks.py
diff options
context:
space:
mode:
authorDavid Kupka <dkupka@redhat.com>2014-10-22 09:07:44 -0400
committerMartin Kosek <mkosek@redhat.com>2014-11-05 15:22:51 +0100
commit364d466fd7def3589ddb9e4a9f8d73fc2df80439 (patch)
tree6a453eae45f12c1aa496ae20ade51eb7f35c5e1a /ipaplatform/base/tasks.py
parent0b08043c37210d0f86cb0c66d659acafda0fb529 (diff)
downloadfreeipa-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.py48
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()