summaryrefslogtreecommitdiffstats
path: root/ipaplatform/fedora
diff options
context:
space:
mode:
authorTomas Babej <tbabej@redhat.com>2014-05-26 17:23:04 +0200
committerPetr Viktorin <pviktori@redhat.com>2014-06-16 19:48:18 +0200
commit6a4cd8a4e33fba68c89d6046a98adb790c401041 (patch)
tree14dbb08aa0ddef32282958bff5dbb61af7ab2058 /ipaplatform/fedora
parentc465eb842f8b6637268ae790b3cee5a88a5e1544 (diff)
downloadfreeipa-6a4cd8a4e33fba68c89d6046a98adb790c401041.tar.gz
freeipa-6a4cd8a4e33fba68c89d6046a98adb790c401041.tar.xz
freeipa-6a4cd8a4e33fba68c89d6046a98adb790c401041.zip
ipaplatform: Move restore_context and check_selinux_status implementations to base fedora platform tasks
https://fedorahosted.org/freeipa/ticket/4052 Reviewed-By: Petr Viktorin <pviktori@redhat.com>
Diffstat (limited to 'ipaplatform/fedora')
-rw-r--r--ipaplatform/fedora/tasks.py62
1 files changed, 59 insertions, 3 deletions
diff --git a/ipaplatform/fedora/tasks.py b/ipaplatform/fedora/tasks.py
index 48a4ca70e..841b3d4e0 100644
--- a/ipaplatform/fedora/tasks.py
+++ b/ipaplatform/fedora/tasks.py
@@ -1,7 +1,8 @@
-# Authors:
-# Tomas Babej <tbabej@redhat.com>
+# Authors: Simo Sorce <ssorce@redhat.com>
+# Alexander Bokovoy <abokovoy@redhat.com>
+# Tomas Babej <tbabej@redhat.com>
#
-# Copyright (C) 2014 Red Hat
+# Copyright (C) 2007-2014 Red Hat
# see file 'COPYING' for use and warranty information
#
# This program is free software; you can redistribute it and/or modify
@@ -20,3 +21,58 @@
'''
This module contains default Fedora-specific implementations of system tasks.
'''
+
+import os
+import ipautil
+
+from ipaplatform.base.tasks import *
+
+
+def restore_context(filepath, restorecon='/sbin/restorecon'):
+ """
+ restore security context on the file path
+ SELinux equivalent is /path/to/restorecon <filepath>
+
+ restorecon's return values are not reliable so we have to
+ ignore them (BZ #739604).
+
+ ipautil.run() will do the logging.
+ """
+ try:
+ if os.path.exists('/usr/sbin/selinuxenabled'):
+ ipautil.run(["/usr/sbin/selinuxenabled"])
+ else:
+ # No selinuxenabled, no SELinux
+ return
+ except ipautil.CalledProcessError:
+ # selinuxenabled returns 1 if not enabled
+ return
+
+ if (os.path.exists(restorecon)):
+ ipautil.run([restorecon, filepath], raiseonerr=False)
+
+
+def check_selinux_status(restorecon='/sbin/restorecon'):
+ """
+ We don't have a specific package requirement for policycoreutils
+ which provides restorecon. This is because we don't require
+ SELinux on client installs. However if SELinux is enabled then
+ this package is required.
+
+ This function returns nothing but may raise a Runtime exception
+ if SELinux is enabled but restorecon is not available.
+ """
+ try:
+ if os.path.exists('/usr/sbin/selinuxenabled'):
+ ipautil.run(["/usr/sbin/selinuxenabled"])
+ else:
+ # No selinuxenabled, no SELinux
+ return
+ except ipautil.CalledProcessError:
+ # selinuxenabled returns 1 if not enabled
+ return
+
+ if not os.path.exists(restorecon):
+ raise RuntimeError('SELinux is enabled but %s does not exist.\n'
+ 'Install the policycoreutils package and start the '
+ 'installation again.' % restorecon)