Ejemplo n.º 1
0
    def uncfgCmdGen(self):
        for authData, paramsName in self.__knownAuths.items():
            if isinstance(authData, CommunityData):
                config.delV1System(
                    self.snmpEngine,
                    authData.securityName
                    )
                config.delTargetParams(
                    self.snmpEngine, paramsName
                    )
            elif isinstance(authData, UsmUserData):
                config.delV3User(
                    self.snmpEngine, authData.securityName
                    )
                config.delTargetParams(
                    self.snmpEngine, paramsName
                    )
            else:
                raise error.PySnmpError('Unsupported SNMP version')
        self.__knownAuths.clear()

        for transportDomain, transport in self.__knownTransports.items():
            config.delSocketTransport(
                self.snmpEngine, transportDomain
                )
            transport.closeTransport()
        self.__knownTransports.clear()

        for addrName in self.__knownTransportAddrs.values():
            config.delTargetAddr(
                self.snmpEngine, addrName
                )
        self.__knownTransportAddrs.clear()
Ejemplo n.º 2
0
 def _delete_snmp_config(self, ctxt, snmp_config):
     LOG.info("Delete snmp config:%s" % snmp_config)
     version_int = self._get_snmp_version_int(ctxt,
                                              snmp_config.get("version"))
     if version_int == constants.SNMP_V3_INT:
         username = snmp_config.get('username')
         engine_id = snmp_config.get('engine_id')
         config.delV3User(self.snmp_engine, userName=username,
                          securityEngineId=v2c.OctetString(
                              hexValue=engine_id))
     else:
         storage_id = snmp_config.get('storage_id')
         community_index = self._get_community_index(storage_id)
         config.delV1System(self.snmp_engine, community_index)
Ejemplo n.º 3
0
 def _delete_snmp_config(self, ctxt, snmp_config):
     LOG.info("Start to remove snmp trap config.")
     version_int = self._get_snmp_version_int(ctxt,
                                              snmp_config.get("version"))
     if version_int == constants.SNMP_V3_INT:
         username = snmp_config.get('username')
         engine_id = snmp_config.get('engine_id')
         if engine_id:
             engine_id = v2c.OctetString(hexValue=engine_id)
         try:
             config.delV3User(self.snmp_engine, userName=username,
                              securityEngineId=engine_id)
         except Exception as e:
             msg = six.text_type(e)
             LOG.warning("Snmp trap configuration to be "
                         "deleted could not be found. Reason: %s", msg)
     else:
         storage_id = snmp_config.get('storage_id')
         community_index = self._get_community_index(storage_id)
         config.delV1System(self.snmp_engine, community_index)
Ejemplo n.º 4
0
    def unconfigure(self, snmpEngine, authData=None):
        cache = self._getCache(snmpEngine)
        if authData:
            if isinstance(authData, CommunityData):
                authDataKey = authData.communityIndex
            elif isinstance(authData, UsmUserData):
                authDataKey = authData.userName, authData.securityEngineId
            else:
                raise error.PySnmpError('Unsupported authentication object')
            if authDataKey in cache['auth']:
                authDataKeys = (authDataKey,)
            else:
                raise error.PySnmpError('Unknown authData %s' % (authData,))
        else:
            authDataKeys = list(cache['auth'].keys())

        addrNames, paramsNames = set(), set()

        for authDataKey in authDataKeys:
            authDataX = cache['auth'][authDataKey]
            del cache['auth'][authDataKey]
            if isinstance(authDataX, CommunityData):
                config.delV1System(
                    snmpEngine,
                    authDataX.communityIndex
                )
            elif isinstance(authDataX, UsmUserData):
                config.delV3User(
                    snmpEngine,
                    authDataX.userName,
                    authDataX.securityEngineId
                )
            else:
                raise error.PySnmpError('Unsupported authentication object')

            paramsKey = (authDataX.securityName,
                         authDataX.securityLevel,
                         authDataX.mpModel)
            if paramsKey in cache['parm']:
                paramsName, useCount = cache['parm'][paramsKey]
                useCount -= 1
                if useCount:
                    cache['parm'][paramsKey] = paramsName, useCount
                else:
                    del cache['parm'][paramsKey]
                    config.delTargetParams(
                        snmpEngine, paramsName
                    )
                    paramsNames.add(paramsName)
            else:
                raise error.PySnmpError('Unknown target %s' % (paramsKey,))

            addrKeys = [x for x in cache['addr'] if x[0] == paramsName]

            for addrKey in addrKeys:
                addrName, useCount = cache['addr'][addrKey]
                useCount -= 1
                if useCount:
                    cache['addr'][addrKey] = addrName, useCount
                else:
                    config.delTargetAddr(snmpEngine, addrName)

                    addrNames.add(addrKey)

                    if addrKey[1] in cache['tran']:
                        transport, useCount = cache['tran'][addrKey[1]]
                        if useCount > 1:
                            useCount -= 1
                            cache['tran'][addrKey[1]] = transport, useCount
                        else:
                            config.delTransport(snmpEngine, addrKey[1])
                            transport.closeTransport()
                            del cache['tran'][addrKey[1]]

        return addrNames, paramsNames
Ejemplo n.º 5
0
    def uncfgCmdGen(self, authData=None):
        if authData:
            if isinstance(authData, CommunityData):
                authDataKey = authData.communityIndex
            elif isinstance(authData, UsmUserData):
                authDataKey = authData.userName, authData.securityEngineId
            else:
                raise error.PySnmpError('Unsupported authentication object')
            if authDataKey in self.__knownAuths:
                authDataKeys = (authDataKey, )
            else:
                raise error.PySnmpError('Unknown authData %s' % (authData, ))
        else:
            authDataKeys = list(self.__knownAuths.keys())

        addrNames, paramsNames = set(), set()

        for authDataKey in authDataKeys:
            authDataX = self.__knownAuths[authDataKey]
            del self.__knownAuths[authDataKey]
            if isinstance(authDataX, CommunityData):
                config.delV1System(self.snmpEngine, authDataX.communityIndex)
            elif isinstance(authDataX, UsmUserData):
                config.delV3User(self.snmpEngine, authDataX.userName,
                                 authDataX.securityEngineId)
            else:
                raise error.PySnmpError('Unsupported authentication object')

            paramsKey = authDataX.securityName, \
                        authDataX.securityLevel, \
                        authDataX.mpModel
            if paramsKey in self.__knownParams:
                paramsName, useCount = self.__knownParams[paramsKey]
                useCount -= 1
                if useCount:
                    self.__knownParams[paramsKey] = paramsName, useCount
                else:
                    del self.__knownParams[paramsKey]
                    config.delTargetParams(self.snmpEngine, paramsName)
                    paramsNames.add(paramsName)
            else:
                raise error.PySnmpError('Unknown target %s' % (paramsKey, ))

            addrKeys = [
                x for x in self.__knownTransportAddrs if x[0] == paramsName
            ]

            for addrKey in addrKeys:
                addrName, useCount = self.__knownTransportAddrs[addrKey]
                useCount -= 1
                if useCount:
                    self.__knownTransportAddrs[addrKey] = addrName, useCount
                else:
                    config.delTargetAddr(self.snmpEngine, addrName)

                    addrNames.add(addrKey)

                    if addrKey[1] in self.__knownTransports:
                        transport, useCount = self.__knownTransports[
                            addrKey[1]]
                        if useCount > 1:
                            useCount -= 1
                            self.__knownTransports[
                                addrKey[1]] = transport, useCount
                        else:
                            config.delTransport(self.snmpEngine, addrKey[1])
                            transport.closeTransport()
                            del self.__knownTransports[addrKey[1]]

        return addrNames, paramsNames
Ejemplo n.º 6
0
    def unconfigure(self,
                    snmpEngine,
                    authData=None,
                    contextName=null,
                    **options):
        cache = self._getCache(snmpEngine)

        if authData:
            if isinstance(authData, CommunityData):
                authDataKey = authData.communityIndex

            elif isinstance(authData, UsmUserData):
                authDataKey = authData.userName, authData.securityEngineId

            else:
                raise error.PySnmpError('Unsupported authentication object')

            if authDataKey in cache['auth']:
                authDataKeys = (authDataKey, )

            else:
                raise error.PySnmpError('Unknown authData %s' % (authData, ))

        else:
            authDataKeys = list(cache['auth'].keys())

        addrNames, paramsNames = set(), set()

        for authDataKey in authDataKeys:
            authDataX = cache['auth'][authDataKey]

            del cache['auth'][authDataKey]

            if isinstance(authDataX, CommunityData):
                config.delV1System(snmpEngine, authDataX.communityIndex)

            elif isinstance(authDataX, UsmUserData):
                config.delV3User(snmpEngine, authDataX.userName,
                                 authDataX.securityEngineId)

            else:
                raise error.PySnmpError('Unsupported authentication object')

            paramsKey = (authDataX.securityName, authDataX.securityLevel,
                         authDataX.mpModel)

            if paramsKey in cache['parm']:
                paramsName, useCount = cache['parm'][paramsKey]

                useCount -= 1

                if useCount:
                    cache['parm'][paramsKey] = paramsName, useCount

                else:
                    del cache['parm'][paramsKey]

                    config.delTargetParams(snmpEngine, paramsName)

                    paramsNames.add(paramsName)

            else:
                raise error.PySnmpError('Unknown target %s' % (paramsKey, ))

            addrKeys = [x for x in cache['addr'] if x[0] == paramsName]

            for addrKey in addrKeys:
                addrName, useCount = cache['addr'][addrKey]

                useCount -= 1

                if useCount:
                    cache['addr'][addrKey] = addrName, useCount

                else:
                    config.delTargetAddr(snmpEngine, addrName)

                    del cache['addr'][addrKey]

                    addrNames.add(addrKey)

                    if addrKey[1] in cache['tran']:
                        transport, useCount = cache['tran'][addrKey[1]]

                        if useCount > 1:
                            useCount -= 1
                            cache['tran'][addrKey[1]] = transport, useCount

                        else:
                            config.delTransport(snmpEngine, addrKey[1])
                            transport.closeTransport()

                            del cache['tran'][addrKey[1]]

        return addrNames, paramsNames
Ejemplo n.º 7
0
 def delV3User(self, securityName, contextEngineId=None):
     config.delV3User(self.snmpEngine, securityName, contextEngineId)
     return
    def uncfgCmdGen(self, authData=None):
        if authData:
            if isinstance(authData, CommunityData):
                authDataKey = authData.communityIndex
            elif isinstance(authData, UsmUserData):
                authDataKey = authData.userName, authData.securityEngineId
            else:
                raise error.PySnmpError('Unsupported authentication object')
            if authDataKey in self.__knownAuths:
                authDataKeys = ( authDataKey, )
            else:
                raise error.PySnmpError('Unknown authData %s' % (authData,))
        else:
            authDataKeys = list(self.__knownAuths.keys())

        addrNames, paramsNames = set(), set()

        for authDataKey in authDataKeys:
            authDataX = self.__knownAuths[authDataKey] 
            del self.__knownAuths[authDataKey]
            if isinstance(authDataX, CommunityData):
                config.delV1System(
                    self.snmpEngine,
                    authDataX.communityIndex
                )
            elif isinstance(authDataX, UsmUserData):
                config.delV3User(
                    self.snmpEngine,
                    authDataX.userName, 
                    authDataX.securityEngineId
                )
            else:
                raise error.PySnmpError('Unsupported authentication object')

            paramsKey = authDataX.securityName, \
                        authDataX.securityLevel, \
                        authDataX.mpModel
            if paramsKey in self.__knownParams:
                paramsName, useCount = self.__knownParams[paramsKey]
                useCount -= 1
                if useCount:
                    self.__knownParams[paramsKey] = paramsName, useCount
                else:
                    del self.__knownParams[paramsKey]
                    config.delTargetParams(
                        self.snmpEngine, paramsName
                    )
                    paramsNames.add(paramsName)
            else:
                raise error.PySnmpError('Unknown target %s' % (paramsKey,))

            addrKeys = [ x for x in self.__knownTransportAddrs if x[0] == paramsName ]

            for addrKey in addrKeys:
                addrName, useCount = self.__knownTransportAddrs[addrKey]
                useCount -= 1
                if useCount:
                    self.__knownTransportAddrs[addrKey] = addrName, useCount
                else:
                    config.delTargetAddr(self.snmpEngine, addrName)

                    addrNames.add(addrKey)

                    if addrKey[1] in self.__knownTransports:
                        transport, useCount = self.__knownTransports[addrKey[1]]
                        if useCount > 1:
                            useCount -= 1
                            self.__knownTransports[addrKey[1]] = transport, useCount
                        else:
                            config.delTransport(self.snmpEngine, addrKey[1])
                            transport.closeTransport()
                            del self.__knownTransports[addrKey[1]]

        return addrNames, paramsNames
Ejemplo n.º 9
0
 def delV3User(self, securityName, contextEngineId=None):
     config.delV3User(self.snmpEngine, securityName, contextEngineId)
     return