import logging import os import subprocess log = logging.getLogger(__name__) class SystemCommand(): @classmethod def execute(cls, cmd_args, with_sudo=True): """Runs the command passed.""" if not isinstance(cmd_args, list): cmd_args = list(cmd_args) if with_sudo: cmd_args.insert(0, "sudo") with open(os.devnull, 'w') as tempf: process = subprocess.Popen(cmd_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = process.communicate() if process.returncode != 0: log.warn("Error executing command: '%s'. Reason: %s." % (" ".join(cmd_args), stderr)) else: log.debug("Sucess executing command %s. Output: %s" % (cmd_args, stdout)) return stdout @classmethod def add_group(cls, groupname): cmd_args = ["groupadd", groupname] cls.execute(cmd_args) @classmethod def rename_group(cls, groupname, newgroupname): cmd_args = ["groupmod", "-n", newgroupname, groupname] cls.execute(cmd_args) @classmethod def delete_group(cls, groupname): cmd_args = ["groupdel", groupname] cls.execute(cmd_args) @classmethod def add_user(cls, username): cmd_args = ["adduser", "--disabled-password", "--force-badname", "--quiet", "--gecos", "''", username] cls.execute(cmd_args) @classmethod def add_user_to_group(cls, groupname, username): cmd_args = ["gpasswd", "-a", username, groupname] cls.execute(cmd_args) @classmethod def remove_user_from_group(cls, groupname, username): cmd_args = ["gpasswd", "-d", username, groupname] cls.execute(cmd_args) @classmethod def get_group_members(cls, groupname): cmd_args = ["members", "--all", groupname] try: output = cls.execute(cmd_args) users = set(output.split()) return users except: return {} @classmethod def change_ownership(cls, path, group): cmd_args = ["change-repo-ownership", path, group] cls.execute(cmd_args) @classmethod def get_system_groups(cls): cmd_args = ["getent", "group"] try: output = cls.execute(cmd_args) lines = output.split() groups = [line.split(":")[0] for line in lines] return groups except: return []