コード例 #1
0
ファイル: zipreader.py プロジェクト: beausea/pysmi
    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)
コード例 #2
0
ファイル: callback.py プロジェクト: pjordan4981/pysmi
    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)
コード例 #3
0
    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)
コード例 #4
0
ファイル: httpclient.py プロジェクト: pjordan4981/pysmi
    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)
コード例 #5
0
    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)
コード例 #6
0
ファイル: ftpclient.py プロジェクト: kazzyx/pysmi
    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)