def getData(self, mibname, zipBlob=None): debug.logger & debug.flagReader and debug.logger('looking for MIB %s at %s' % (mibname, self._name)) if self._pendingError: raise self._pendingError if not self._members: raise error.PySmiReaderFileNotFoundError('source MIB %s not found' % mibname, reader=self) for mibalias, mibfile in self.getMibVariants(mibname): debug.logger & debug.flagReader and debug.logger('trying MIB %s' % mibfile) try: refs = self._members[mibfile] except KeyError: continue mibData, mtime = self._readZipFile(refs) if not mibData: continue debug.logger & debug.flagReader and debug.logger( 'source MIB %s, mtime %s, read from %s/%s' % (mibfile, time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(mtime)), self._name, mibfile) ) if len(mibData) == self.maxMibSize: raise IOError('MIB %s/%s too large' % (self._name, mibfile)) return MibInfo(path='zip://%s/%s' % (self._name, mibfile), file=mibfile, name=mibalias, mtime=mtime), decode(mibData) raise error.PySmiReaderFileNotFoundError('source MIB %s not found' % mibname, reader=self)
def getData(self, mibname): debug.logger & debug.flagReader and debug.logger('calling user callback %s for MIB %s' % (self._cbFun, mibname)) res = self._cbFun(mibname, self._cbCtx) if res: return MibInfo(path='file:///dev/stdin', file='', name=mibname, mtime=time.time()), res raise error.PySmiReaderFileNotFoundError(mibname=mibname, reader=self)
def getData(self, mibname): headers = {'Accept': 'text/plain'} if sys.version_info[:2] < (2, 6): conn = httplib.HTTPConnection(self._host, self._port) else: conn = httplib.HTTPConnection(self._host, self._port, timeout=self._timeout) mibname = decode(mibname) debug.logger & debug.flagReader and debug.logger( 'looking for MIB %s' % mibname) for mibalias, mibfile in self.getMibVariants(mibname): location = self._locationTemplate.replace('@mib@', mibfile) debug.logger & debug.flagReader and debug.logger( 'trying to fetch MIB from %s://%s:%s%s' % (self._schema, self._host, self._port, location)) try: conn.request('GET', location, '', headers) response = conn.getresponse() except Exception: debug.logger & debug.flagReader and debug.logger( 'failed to fetch MIB from %s://%s:%s%s: %s' % (self._schema, self._host, self._port, location, sys.exc_info()[1])) continue debug.logger & debug.flagReader and debug.logger( 'HTTP response %s' % response.status) if response.status == 200: try: mtime = time.mktime( time.strptime(response.getheader('Last-Modified'), "%a, %d %b %Y %H:%M:%S %Z")) except Exception: debug.logger & debug.flagReader and debug.logger( 'malformed HTTP headers: %s' % sys.exc_info()[1]) mtime = time.time() debug.logger & debug.flagReader and debug.logger( 'fetching source MIB %s, mtime %s' % (location, response.getheader('Last-Modified'))) return MibInfo( path='%s://%s:%s%s' % (self._schema, self._host, self._port, location), file=mibfile, name=mibalias, mtime=mtime), decode(response.read(self.maxMibSize)) raise error.PySmiReaderFileNotFoundError('source MIB %s not found' % mibname, reader=self)
def getData(self, mibname): headers = {'Accept': 'text/plain', 'User-Agent': self._user_agent} mibname = decode(mibname) debug.logger & debug.flagReader and debug.logger( 'looking for MIB %s' % mibname) for mibalias, mibfile in self.getMibVariants(mibname): if self.MIB_MAGIC in self._url: url = self._url.replace(self.MIB_MAGIC, mibfile) else: url = self._url + mibfile debug.logger & debug.flagReader and debug.logger( 'trying to fetch MIB from %s' % url) try: req = Request(url, headers=headers) response = urlopen(req) except Exception: debug.logger & debug.flagReader and debug.logger( 'failed to fetch MIB from %s: %s' % (url, sys.exc_info()[1])) continue debug.logger & debug.flagReader and debug.logger( 'HTTP response %s' % response.code) if response.code == 200: try: mtime = time.mktime( time.strptime(response.getheader('Last-Modified'), "%a, %d %b %Y %H:%M:%S %Z")) except Exception: debug.logger & debug.flagReader and debug.logger( 'malformed HTTP headers: %s' % sys.exc_info()[1]) mtime = time.time() debug.logger & debug.flagReader and debug.logger( 'fetching source MIB %s, mtime %s' % (url, response.getheader('Last-Modified'))) return MibInfo(path=url, file=mibfile, name=mibalias, mtime=mtime), decode( response.read(self.maxMibSize)) raise error.PySmiReaderFileNotFoundError('source MIB %s not found' % mibname, reader=self)
def getData(self, mibname, **options): debug.logger & debug.flagReader and debug.logger( '%slooking for MIB %s' % (self._recursive and 'recursively ' or '', mibname)) for path in self.getSubdirs(self._path, self._recursive, self._ignoreErrors): for mibalias, mibfile in self.getMibVariants(mibname, **options): f = os.path.join(decode(path), decode(mibfile)) debug.logger & debug.flagReader and debug.logger( 'trying MIB %s' % f) if os.path.exists(f) and os.path.isfile(f): try: mtime = os.stat(f)[8] debug.logger & debug.flagReader and debug.logger( 'source MIB %s mtime is %s, fetching data...' % (f, time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(mtime)))) fp = open(f, mode='rb') mibData = fp.read(self.maxMibSize) fp.close() if len(mibData) == self.maxMibSize: raise IOError('MIB %s too large' % f) return MibInfo(path='file://%s' % f, file=mibfile, name=mibalias, mtime=mtime), decode(mibData) except (OSError, IOError): debug.logger & debug.flagReader and debug.logger( 'source file %s open failure: %s' % (f, sys.exc_info()[1])) if not self._ignoreErrors: raise error.PySmiError('file %s access error: %s' % (f, sys.exc_info()[1])) raise error.PySmiReaderFileNotModifiedError( 'source MIB %s is older than needed' % f, reader=self) raise error.PySmiReaderFileNotFoundError('source MIB %s not found' % mibname, reader=self)
def getData(self, mibname): if self._ssl: conn = ftplib.FTP_TLS() else: conn = ftplib.FTP() try: conn.connect(self._host, self._port, self._timeout) except ftplib.all_errors: raise error.PySmiReaderFileNotFoundError( 'failed to connect to FTP server %s:%s: %s' % (self._host, self._port, sys.exc_info()[1]), reader=self) try: conn.login(self._user, self._password) except ftplib.all_errors: conn.close() raise error.PySmiReaderFileNotFoundError( 'failed to log in to FTP server %s:%s as %s/%s: %s' % (self._host, self._port, self._user, self._password, sys.exc_info()[1]), reader=self) mibname = decode(mibname) debug.logger & debug.flagReader and debug.logger( 'looking for MIB %s' % mibname) for mibalias, mibfile in self.getMibVariants(mibname): location = self._locationTemplate.replace('@mib@', mibfile) mtime = time.time() debug.logger & debug.flagReader and debug.logger( 'trying to fetch MIB %s from %s:%s' % (location, self._host, self._port)) data = [] try: try: response = conn.sendcmd('MDTM %s' % location) except ftplib.all_errors: debug.logger & debug.flagReader and debug.logger( 'server %s:%s does not support MDTM command, fetching file %s' % (self._host, self._port, location)) else: debug.logger & debug.flagReader and debug.logger( 'server %s:%s MDTM response is %s' % (self._host, self._port, response)) if response[:3] == 213: mtime = time.mktime( time.strptime(response[4:], "%Y%m%d%H%M%S")) debug.logger & debug.flagReader and debug.logger( 'fetching source MIB %s, mtime %s' % (location, time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(mtime)))) conn.retrlines('RETR %s' % location, lambda x, y=data: y.append(x)) except ftplib.all_errors: debug.logger & debug.flagReader and debug.logger( 'failed to fetch MIB %s from %s:%s: %s' % (location, self._host, self._port, sys.exc_info()[1])) continue data = decode('\n'.join(data)) debug.logger & debug.flagReader and debug.logger( 'fetched %s bytes in %s' % (len(data), location)) conn.close() return MibInfo(path='ftp://%s%s' % (self._host, location), file=mibfile, name=mibalias, mtime=mtime), data conn.close() raise error.PySmiReaderFileNotFoundError('source MIB %s not found' % mibname, reader=self)