def setValue(self, value, name, idx): try: if hasattr(self.syntax, 'setValue'): return self.syntax.setValue(value) else: return self.syntax.clone(value) except PyAsn1Error: exc_t, exc_v, exc_tb = sys.exc_info() debug.logger & debug.flagIns and debug.logger('setValue: %s=%r failed with traceback %s' % (self.name, value, traceback.format_exception(exc_t, exc_v, exc_tb))) if isinstance(exc_v, error.TableRowManagement): raise exc_v else: raise error.WrongValueError(idx=idx, name=name, msg=exc_v)
def createTest(self, name, val, idx, acInfo): if name == self.name: try: self.__newSyntax = self.setValue(val, name, idx) except error.MibOperationError: # SMI exceptions may carry additional content why = sys.exc_info()[1] if 'syntax' in why: self.__newSyntax = why['syntax'] else: raise error.WrongValueError(idx=idx, name=name, msg=sys.exc_info()[1]) else: raise error.NoSuchInstanceError(idx=idx, name=name)
def createTest(self, varBind, **context): name, val = varBind if name == self.name: try: self.__newSyntax = self.setValue(val, name, **context) except error.MibOperationError: # SMI exceptions may carry additional content why = sys.exc_info()[1] if 'syntax' in why: self.__newSyntax = why['syntax'] else: raise error.WrongValueError(name=name, idx=context.get('idx'), msg=sys.exc_info()[1]) else: raise error.NoSuchInstanceError(name=name, idx=context.get('idx'))
def variate(oid, tag, value, **context): if 'dbConn' in moduleContext: dbConn = moduleContext['dbConn'] else: raise error.SnmpsimError('variation module not initialized') cursor = dbConn.cursor() try: cursor.execute('set session transaction isolation level %s' % moduleContext['isolationLevel']) cursor.fetchall() except: # non-MySQL/Postgres pass if value: dbTable = value.split(',').pop(0) elif 'dbTable' in moduleContext: dbTable = moduleContext['dbTable'] else: log.msg('SQL table not specified for OID %s' % (context['origOid'], )) return context['origOid'], tag, context['errorStatus'] origOid = context['origOid'] sqlOid = '.'.join(['%10s' % x for x in str(origOid).split('.')]) if context['setFlag']: if 'hexvalue' in context: textTag = context['hextag'] textValue = context['hexvalue'] else: textTag = SnmprecGrammar().getTagByType(context['origValue']) textValue = str(context['origValue']) cursor.execute( 'select maxaccess,tag,value from %s where oid=\'%s\' limit 1' % (dbTable, sqlOid)) resultset = cursor.fetchone() if resultset: maxaccess = resultset[0] if maxaccess != 'read-write': return origOid, tag, context['errorStatus'] value_written = textValue try: value_settings = {} value_settings = dict( [split(x, '=') for x in split(resultset[2], ',')]) print value_settings # if detected error mode, raise an error if 'mode' in value_settings and \ value_settings['mode'] == 'error': raise Error.WrongValueError( name=origOid, idx=max( 0, context['varsTotal'] - context['varsRemaining'] - 1)) elif 'mode' in value_settings and \ value_settings['mode'] == 'normal': value_written = "mode=" + value_settings['mode'] + \ ",value=" + textValue else: return origOid, tag, context['errorStatus'] except Error.WrongValueError: cursor.close() raise Error.WrongValueError(name=origOid, idx=max( 0, context['varsTotal'] - context['varsRemaining'] - 1)) except: pass cursor.execute( 'update %s set tag=\'%s\',value=\'%s\' where oid=\'%s\'' % (dbTable, textTag, value_written, sqlOid)) inform = moduleContext.get('inform') try: value = str(origOid) + " " + textValue written_len = os.write(inform, value) if written_len != len(value): log.msg( "--->Infrasim: Expected length %d, actual length %d\n" % (len(str(origOid)), written_len)) cursor.close() return origOid, tag, context['errorStatus'] except Exception, ex: log.msg("--->Infrasim: {0}".format(ex)) cursor.close() return origOid, tag, context['errorStatus'] else: cursor.close() raise Error.NoSuchInstanceError( name=origOid, idx=max(0, context['varsTotal'] - context['varsRemaining'] - 1)) if context['varsRemaining'] == 0: # last OID in PDU dbConn.commit() cursor.close() return origOid, textTag, context['origValue']