summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipa-python/ipautil.py2
-rw-r--r--ipa-server/ipaserver/service.py25
2 files changed, 26 insertions, 1 deletions
diff --git a/ipa-python/ipautil.py b/ipa-python/ipautil.py
index c617854e5..32faabeab 100644
--- a/ipa-python/ipautil.py
+++ b/ipa-python/ipautil.py
@@ -83,6 +83,8 @@ def run(args, stdin=None):
if p.returncode != 0:
raise CalledProcessError(p.returncode, ' '.join(args))
+ return (stdout, stderr)
+
def file_exists(filename):
try:
mode = os.stat(filename)[stat.ST_MODE]
diff --git a/ipa-server/ipaserver/service.py b/ipa-server/ipaserver/service.py
index f835b3f5f..f6df6e5b3 100644
--- a/ipa-server/ipaserver/service.py
+++ b/ipa-server/ipaserver/service.py
@@ -34,7 +34,7 @@ def is_running(service_name):
ret = True
try:
ipautil.run(["/sbin/service", service_name, "status"])
- except CalledProcessError:
+ except ipautil.CalledProcessError:
ret = False
return ret
@@ -43,6 +43,26 @@ def chkconfig_on(service_name):
def chkconfig_off(service_name):
ipautil.run(["/sbin/chkconfig", service_name, "off"])
+
+def is_enabled(service_name):
+ (stdout, stderr) = ipautil.run(["/sbin/chkconfig", "--list", service_name])
+
+ runlevels = {}
+ for runlevel in range(0, 7):
+ runlevels[runlevel] = False
+
+ for line in stdout.split("\n"):
+ parts = line.split()
+ if parts[0] == service_name:
+ for s in parts[1:]:
+ (runlevel, status) = s.split(":")[0:2]
+ try:
+ runlevels[int(runlevel)] = status == "on"
+ except ValueError:
+ pass
+ break
+
+ return (runlevels[3] and runlevels[4] and runlevels[5])
def print_msg(message, output_fd=sys.stdout):
logging.debug(message)
@@ -77,6 +97,9 @@ class Service:
def chkconfig_off(self):
chkconfig_off(self.service_name)
+ def is_enabled(self):
+ return is_enabled(self.service_name)
+
def print_msg(self, message):
print_msg(message, self.output_fd)