Beispiel #1
0
    def createTest(self, varBind, **context):
        name, val = varBind

        # Make sure creation allowed, create a new column instance but
        # do not replace the old one
        if name == self.name:
            raise error.NoAccessError(name=name, idx=context.get('idx'))

        acFun = context.get('acFun')
        if acFun:
            if (val is not None and self.maxAccess != 'readcreate' or
                    acFun('write', (name, self.syntax), **context)):
                debug.logger & debug.flagACL and debug.logger(
                    'createTest: %s=%r %s at %s' % (name, val, self.maxAccess, self.name))
                raise error.NoCreationError(name=name, idx=context.get('idx'))

        # Create instances if either it does not yet exist (row creation)
        # or a value is passed (multiple OIDs in SET PDU)
        if val is None and name in self.__createdInstances:
            return

        self.__createdInstances[name] = self.protoInstance(
            self.name, name[len(self.name):], self.syntax.clone()
        )

        self.__createdInstances[name].createTest(varBind, **context)
Beispiel #2
0
class MibTableColumn(MibScalar):
    """MIB table column. Manages a set of column instance variables"""
    protoInstance = MibScalarInstance

    def __init__(self, name, syntax):
        MibScalar.__init__(self, name, syntax)
        self.__createdInstances = {}
        self.__destroyedInstances = {}
        self.__rowOpWanted = {}

    def getNode(self, name, idx=None):
        try:
            return MibScalar.getNode(self, name, idx=None)
        except error.NoSuchObjectError:
            raise error.NoSuchInstanceError(idx=idx, name=name)

    def getNextNode(self, name, idx=None):
        try:
            return MibScalar.getNextNode(self, name, idx=None)
        except error.NoSuchObjectError:
            raise error.NoSuchInstanceError(idx=idx, name=name)

    def setProtoInstance(self, protoInstance):
        self.protoInstance = protoInstance

    # Column creation (this should probably be converted into some state
    # machine for clarity). Also, it might be a good idea to inidicate
    # defaulted cols creation in a clearer way than just a val == None.

    def createTest(self, name, val, idx, (acFun, acCtx)):
        # Make sure creation allowed, create a new column instance but
        # do not replace the old one
        if name == self.name:
            raise error.NoAccessError(idx=idx, name=name)
        if acFun and \
               val is not None and \
               self.maxAccess != 'readcreate' or \
               acFun and acFun(name, idx, 'write', acCtx):
            raise error.NoCreationError(idx=idx, name=name)
        # Create instances if either it does not yet exist (row creation)
        # or a value is passed (multiple OIDs in SET PDU)
        if val is None and self.__createdInstances.has_key(name):
            return
        self.__createdInstances[name] = self.protoInstance(
            self.name, name[len(self.name):], self.syntax.clone())
        self.__createdInstances[name].createTest(name, val, idx,
                                                 (acFun, acCtx))
Beispiel #3
0
 def createTest(self, name, val, idx, acInfo):
     (acFun, acCtx) = acInfo
     # Make sure creation allowed, create a new column instance but
     # do not replace the old one
     if name == self.name:
         raise error.NoAccessError(idx=idx, name=name)
     if acFun:
         if val is not None and self.maxAccess != 'readcreate' or \
                acFun(name, self.syntax, idx, 'write', acCtx):
             debug.logger & debug.flagACL and debug.logger('createTest: %s=%r %s at %s' % (name, val, self.maxAccess, self.name))
             raise error.NoCreationError(idx=idx, name=name)
     # Create instances if either it does not yet exist (row creation)
     # or a value is passed (multiple OIDs in SET PDU)
     if val is None and name in self.__createdInstances:
         return
     self.__createdInstances[name] = self.protoInstance(
         self.name, name[len(self.name):], self.syntax.clone()
     )
     self.__createdInstances[name].createTest(name, val, idx, acInfo)