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)