diff options
author | Rob Austein <sra@hactrn.net> | 2015-11-11 03:22:38 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2015-11-11 03:22:38 +0000 |
commit | 9f6d6462a9cef37735a9d4c61921d04934fd9864 (patch) | |
tree | e5d1b046f6f6bd44faf1b5028f6f1df9698e2a88 /rpki/rtr | |
parent | ac415cdd0f88f8479975627772dd0a84797b261a (diff) |
Configure pylint to use the pylint-django plugin, which (mostly)
understands Django's exotic metaclasses, which in turn allows us to
re-enable a number of pylint checks we had disabled. While we were at
this, stripped out a bunch of old pylint pragmas, then added back the
subset that were really needed. As usual with pylint, this turned up
a few real bugs along with an awful lot of noise.
svn path=/branches/tk705/; revision=6162
Diffstat (limited to 'rpki/rtr')
-rwxr-xr-x | rpki/rtr/bgpdump.py | 9 | ||||
-rw-r--r-- | rpki/rtr/channels.py | 2 | ||||
-rw-r--r-- | rpki/rtr/generator.py | 19 | ||||
-rw-r--r-- | rpki/rtr/pdus.py | 38 | ||||
-rw-r--r-- | rpki/rtr/server.py | 26 |
5 files changed, 69 insertions, 25 deletions
diff --git a/rpki/rtr/bgpdump.py b/rpki/rtr/bgpdump.py index 3336fb9f..1ca04803 100755 --- a/rpki/rtr/bgpdump.py +++ b/rpki/rtr/bgpdump.py @@ -91,6 +91,8 @@ class PrefixPDU(rpki.rtr.generator.PrefixPDU): class AXFRSet(rpki.rtr.generator.AXFRSet): + serial = None + @staticmethod def read_bgpdump(filename): assert filename.endswith(".bz2") @@ -101,6 +103,7 @@ class AXFRSet(rpki.rtr.generator.AXFRSet): @classmethod def parse_bgpdump_rib_dump(cls, filename): + # pylint: disable=W0201 assert os.path.basename(filename).startswith("ribs.") self = cls() self.serial = None @@ -212,7 +215,7 @@ def bgpdump_select_main(args): nonce = rpki.rtr.server.read_current(version)[1] if nonce is None: - nonce = rpki.rtr.generator.new_nonce() + nonce = rpki.rtr.generator.AXFRSet.new_nonce(force_zero_nonce = False) rpki.rtr.server.write_current(serial, nonce, version) rpki.rtr.generator.kick_all(serial) @@ -238,7 +241,7 @@ class BGPDumpReplayClock(object): self.timestamps = [Timestamp(int(f.split(".")[0])) for f in glob.iglob("*.ax.v*")] self.timestamps.sort() self.offset = self.timestamps[0] - int(time.time()) - self.nonce = rpki.rtr.generator.new_nonce() + self.nonce = rpki.rtr.generator.AXFRSet.new_nonce(force_zero_nonce = False) def __nonzero__(self): return len(self.timestamps) > 0 @@ -278,7 +281,7 @@ def bgpdump_server_main(args): You have been warned. """ - logger = logging.LoggerAdapter(logging.root, dict(connection = rpki.rtr.server._hostport_tag())) + logger = logging.LoggerAdapter(logging.root, dict(connection = rpki.rtr.server.hostport_tag())) logger.debug("[Starting]") diff --git a/rpki/rtr/channels.py b/rpki/rtr/channels.py index df96fa58..a4dccbc1 100644 --- a/rpki/rtr/channels.py +++ b/rpki/rtr/channels.py @@ -59,6 +59,8 @@ class ReadBuffer(object): def __init__(self): self.buffer = "" self.version = None + self.need = None + self.callback = None def update(self, need, callback): """ diff --git a/rpki/rtr/generator.py b/rpki/rtr/generator.py index e00e44b7..a879cc39 100644 --- a/rpki/rtr/generator.py +++ b/rpki/rtr/generator.py @@ -105,6 +105,11 @@ class RouterKeyPDU(rpki.rtr.pdus.RouterKeyPDU): Router Key PDU. """ + announce = None + ski = None + asn = None + key = None + @classmethod def from_text(cls, version, asn, gski, key): """ @@ -140,14 +145,15 @@ class ROA(rpki.POW.ROA): # pylint: disable=W0232 """ @classmethod - def derReadFile(cls, fn): # pylint: disable=E1002 + def derReadFile(cls, fn): + # pylint: disable=E1002 self = super(ROA, cls).derReadFile(fn) self.extractWithoutVerifying() return self @property def prefixes(self): - v4, v6 = self.getPrefixes() + v4, v6 = self.getPrefixes() # pylint: disable=E1101 if v4 is not None: for p in v4: yield p @@ -162,7 +168,7 @@ class X509(rpki.POW.X509): # pylint: disable=W0232 @property def asns(self): - resources = self.getRFC3779() + resources = self.getRFC3779() # pylint: disable=E1101 if resources is not None and resources[0] is not None: for min_asn, max_asn in resources[0]: for asn in xrange(min_asn, max_asn + 1): @@ -215,6 +221,8 @@ class AXFRSet(PDUSet): field set. """ + serial = None + @classmethod def parse_rcynic(cls, rcynic_dir, version, scan_roas = None, scan_routercerts = None): """ @@ -245,7 +253,7 @@ class AXFRSet(PDUSet): self.extend(PrefixPDU.from_roa(version = version, asn = asn, prefix_tuple = prefix_tuple) for prefix_tuple in roa.prefixes) if include_routercerts and scan_routercerts is None and fn.endswith(".cer"): - x = X509.derReadFile(os.path.join(root, fn)) + x = X509.derReadFile(os.path.join(root, fn)) # pylint: disable=E1101 eku = x.getEKU() if eku is not None and rpki.oids.id_kp_bgpsec_router in eku: ski = x.getSKI() @@ -415,6 +423,9 @@ class IXFRSet(PDUSet): indicate the changes. """ + from_serial = None + to_serial = None + @classmethod def load(cls, filename): """ diff --git a/rpki/rtr/pdus.py b/rpki/rtr/pdus.py index d355026c..3fb7457d 100644 --- a/rpki/rtr/pdus.py +++ b/rpki/rtr/pdus.py @@ -116,6 +116,8 @@ class PDU(object): header_struct = struct.Struct("!BB2xL") + pdu_type = None + def __init__(self, version): assert version in self.version_map self.version = version @@ -123,6 +125,9 @@ class PDU(object): def __cmp__(self, other): return cmp(self.to_pdu(), other.to_pdu()) + def to_pdu(self, announce = None): + return NotImplementedError + @property def default_version(self): return max(self.version_map.iterkeys()) @@ -170,11 +175,12 @@ class PDUWithSerial(PDU): def __str__(self): return "[%s, serial #%d nonce %d]" % (self.__class__.__name__, self.serial, self.nonce) - def to_pdu(self): + def to_pdu(self, announce = None): """ Generate the wire format PDU. """ + assert announce is None if self._pdu is None: self._pdu = self.header_struct.pack(self.version, self.pdu_type, self.nonce, self.header_struct.size, self.serial) @@ -208,11 +214,12 @@ class PDUWithNonce(PDU): def __str__(self): return "[%s, nonce %d]" % (self.__class__.__name__, self.nonce) - def to_pdu(self): + def to_pdu(self, announce = None): """ Generate the wire format PDU. """ + assert announce is None if self._pdu is None: self._pdu = self.header_struct.pack(self.version, self.pdu_type, self.nonce, self.header_struct.size) return self._pdu @@ -239,11 +246,12 @@ class PDUEmpty(PDU): def __str__(self): return "[%s]" % self.__class__.__name__ - def to_pdu(self): + def to_pdu(self, announce = None): """ Generate the wire format PDU for this prefix. """ + assert announce is None if self._pdu is None: self._pdu = self.header_struct.pack(self.version, self.pdu_type, 0, self.header_struct.size) return self._pdu @@ -370,11 +378,12 @@ class EndOfDataPDUv1(EndOfDataPDUv0): return "[%s, serial #%d nonce %d refresh %d retry %d expire %d]" % ( self.__class__.__name__, self.serial, self.nonce, self.refresh, self.retry, self.expire) - def to_pdu(self): + def to_pdu(self, announce = None): """ Generate the wire format PDU. """ + assert announce is None if self._pdu is None: self._pdu = self.header_struct.pack(self.version, self.pdu_type, self.nonce, self.header_struct.size, self.serial, @@ -416,6 +425,15 @@ class PrefixPDU(PDU): header_struct = struct.Struct("!BB2xLBBBx") asnum_struct = struct.Struct("!L") + address_byte_count = 0 + + def __init__(self, version): + super(PrefixPDU, self).__init__(version) + self.asn = None + self.prefix = None + self.prefixlen = None + self.max_prefixlen = None + self.announce = None def __str__(self): plm = "%s/%s-%s" % (self.prefix, self.prefixlen, self.max_prefixlen) @@ -511,6 +529,13 @@ class RouterKeyPDU(PDU): header_struct = struct.Struct("!BBBxL20sL") + def __init__(self, version): + super(RouterKeyPDU, self).__init__(version) + self.announce = None + self.ski = None + self.asn = None + self.key = None + def __str__(self): return "%s %8s %-32s %s" % ("+" if self.announce else "-", self.asn, base64.urlsafe_b64encode(self.ski).rstrip("="), @@ -596,6 +621,8 @@ class ErrorReportPDU(PDU): self.errno = errno self.errpdu = errpdu self.errmsg = errmsg if errmsg is not None or errno is None else self.errors[errno] + self.pdulen = None + self.errlen = None def __str__(self): return "[%s, error #%s: %r]" % (self.__class__.__name__, self.errno, self.errmsg) @@ -609,11 +636,12 @@ class ErrorReportPDU(PDU): assert remaining >= self.string_struct.size + n return n, reader.get(n), (remaining - self.string_struct.size - n) - def to_pdu(self): + def to_pdu(self, announce = None): """ Generate the wire format PDU for this error report. """ + assert announce is None if self._pdu is None: assert isinstance(self.errno, int) assert not isinstance(self.errpdu, ErrorReportPDU) diff --git a/rpki/rtr/server.py b/rpki/rtr/server.py index f57c3037..052aef2c 100644 --- a/rpki/rtr/server.py +++ b/rpki/rtr/server.py @@ -393,7 +393,7 @@ class KickmeChannel(asyncore.dispatcher, object): self.close() try: os.unlink(self.sockname) - except: # pylint: disable=W0702 + except: pass def log(self, msg): @@ -420,7 +420,7 @@ class KickmeChannel(asyncore.dispatcher, object): sys.exit(1) -def _hostport_tag(): +def hostport_tag(): """ Construct hostname/address + port when we're running under a protocol we understand well enough to do that. This is all @@ -433,28 +433,28 @@ def _hostport_tag(): try: host, port = socket.fromfd(0, socket.AF_INET, socket.SOCK_STREAM).getpeername() proto = "tcp" - except: # pylint: disable=W0702 + except: pass if proto is None: try: host, port = socket.fromfd(0, socket.AF_INET6, socket.SOCK_STREAM).getpeername()[0:2] proto = "tcp" - except: # pylint: disable=W0702 + except: pass if proto is None: try: host, port = os.environ["SSH_CONNECTION"].split()[0:2] proto = "ssh" - except: # pylint: disable=W0702 + except: pass if proto is None: try: host, port = os.environ["REMOTE_HOST"], os.getenv("REMOTE_PORT") proto = "ssl" - except: # pylint: disable=W0702 + except: pass if proto is None: @@ -476,7 +476,7 @@ def server_main(args): pass the results along to a client. """ - logger = logging.LoggerAdapter(logging.root, dict(connection = _hostport_tag())) + logger = logging.LoggerAdapter(logging.root, dict(connection = hostport_tag())) logger.debug("[Starting]") @@ -516,7 +516,7 @@ def listener_main(args): try: listener = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) listener.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) - except: # pylint: disable=W0702 + except: if listener is not None: listener.close() listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) @@ -536,8 +536,8 @@ def listener_main(args): logging.debug("[Received connection from %r]", ai) pid = os.fork() if pid == 0: - os.dup2(s.fileno(), 0) # pylint: disable=E1103 - os.dup2(s.fileno(), 1) # pylint: disable=E1103 + os.dup2(s.fileno(), 0) # pylint: disable=E1101 + os.dup2(s.fileno(), 1) # pylint: disable=E1101 s.close() #os.closerange(3, os.sysconf("SC_OPEN_MAX")) server_main(args) @@ -546,11 +546,11 @@ def listener_main(args): logging.debug("[Spawned server %d]", pid) while True: try: - pid, status = os.waitpid(0, os.WNOHANG) # pylint: disable=W0612 + pid, status = os.waitpid(0, os.WNOHANG) if pid: - logging.debug("[Server %s exited]", pid) + logging.debug("[Server %s exited with status 0x%x]", pid, status) continue - except: # pylint: disable=W0702 + except: pass break |