コード例 #1
0
ファイル: snmpd.py プロジェクト: maximerobin/Ufwi
 def read_config(self, *args, **kwargs):
     try:
         serialized = self.core.config_manager.get(self.NAME)
     except (ConfigError, KeyError):
         self.config = SnmpdConf()
     else:
         self.config = SnmpdConf.deserialize(serialized)
     try:
         serialized = self.core.config_manager.get("contact")
     except (ConfigError, KeyError):
         self.contact_config = ContactConf.defaultConf()
     else:
         self.contact_config = ContactConf.deserialize(serialized)
コード例 #2
0
ファイル: snmpd.py プロジェクト: maximerobin/Ufwi
class SnmpdComponent(ConfigServiceComponent):
    NAME = "snmpd"
    MASTER_KEY = NAME
    VERSION = "1.0"

    REQUIRES = ("config", "contact")

    PIDFILE = "/var/run/snmpd.pid"
    EXE_NAME = "snmpd"
    HARD_STOP_REQUIRED = True

    INIT_SCRIPT = "snmpd"
    CONFIG_DEPENDS = frozenset(("network", "resolv"))

    ROLES = {"conf_read": set(("getSnmpdConfig",)), "conf_write": set(("setSnmpdConfig",))}

    def __init__(self):
        ConfigServiceComponent.__init__(self)
        self.snmp_users_filename = None

    def get_ports(self):
        return [{"proto": "udp", "port": 161}]

    def init(self, core):
        ConfigServiceComponent.init(self, core)
        self.core = core
        depend_key = ("contact", "admin_mail")
        depend_name = "contact_snmpd"
        for (event, method) in (
            ("modify", self.read_config),
            ("apply", self.apply_config),
            ("rollback", self.apply_config),
        ):
            self.core.config_manager.subscribe(method, depend_name, (), event, *depend_key)
        self.addConfFile("/etc/default/snmpd", "root:root", "0644")
        self.addConfFile("/etc/snmp/snmpd.conf", "root:root", "0644")
        self.snmp_users_filename = "/var/lib/snmp/snmpd.conf"

    def read_config(self, *args, **kwargs):
        try:
            serialized = self.core.config_manager.get(self.NAME)
        except (ConfigError, KeyError):
            self.config = SnmpdConf()
        else:
            self.config = SnmpdConf.deserialize(serialized)
        try:
            serialized = self.core.config_manager.get("contact")
        except (ConfigError, KeyError):
            self.contact_config = ContactConf.defaultConf()
        else:
            self.contact_config = ContactConf.deserialize(serialized)

    def genConfigFiles(self, responsible):
        self.read_config()

        admin_mail = self.contact_config.admin_mail
        if not admin_mail:
            admin_mail = "root@localhost"
        template_variables = {
            "enabled": self.config.enabled,
            "syscontact": admin_mail,
            "syslocation": "EdenWall 4",
            "v2c_list": self.config.v2c_list,
            "v3_list": self.config.v3_list,
        }

        self.generate_configfile(template_variables)

        # Delete all current users and create the ones in the V3 list:
        createUser_lines = ""
        for user in self.config.v3_list:
            createUser_lines += 'createUser %s %s "%s" %s "%s"\n' % (
                user[INDEX_V3_USERNAME],
                user[INDEX_V3_AUTHENTICATION_PROTO],
                user[INDEX_V3_AUTHENTICATION_PASS],
                user[INDEX_V3_ENCRYPTION_ALGO],
                user[INDEX_V3_ENCRYPTION_PASS],
            )
        runCommand(self, ["sed", "-i", "/^usmUser/d", self.snmp_users_filename])
        with open(self.snmp_users_filename, "a") as fd:
            fd.write(createUser_lines)

    def should_run(self, responsible):
        return True

    # apply_config is inherited

    def save_config(self, message, context=None):
        with self.core.config_manager.begin(self, context) as cm:
            try:
                cm.delete(self.MASTER_KEY)
            except ConfigError:
                pass
            cm.set(self.MASTER_KEY, self.config.serialize())
            cm.commit(message)

    # Services:

    def service_getSnmpdConfig(self, context):
        return self.config.serialize()

    def service_setSnmpdConfig(self, context, serialized, message):
        self.config = SnmpdConf.deserialize(serialized)
        self.save_config(message, context)
コード例 #3
0
ファイル: snmpd.py プロジェクト: maximerobin/Ufwi
 def service_setSnmpdConfig(self, context, serialized, message):
     self.config = SnmpdConf.deserialize(serialized)
     self.save_config(message, context)