diff options
Diffstat (limited to 'rp/utils/scan_roas')
-rwxr-xr-x | rp/utils/scan_roas | 67 |
1 files changed, 33 insertions, 34 deletions
diff --git a/rp/utils/scan_roas b/rp/utils/scan_roas index a1b64f01..510fd7a0 100755 --- a/rp/utils/scan_roas +++ b/rp/utils/scan_roas @@ -24,40 +24,39 @@ per line. import os import argparse + +import rpki.config import rpki.POW +from rpki.rcynicdb.iterator import authenticated_objects + def check_dir(d): - if not os.path.isdir(d): - raise argparse.ArgumentTypeError("%r is not a directory" % d) - return d - -class ROA(rpki.POW.ROA): - - @classmethod - def parse(cls, fn): - self = cls.derReadFile(fn) - self.extractWithoutVerifying() - return self - - @property - def prefixes(self): - v4, v6 = self.getPrefixes() - for prefix, length, maxlength in (v4 or ()) + (v6 or ()): - if maxlength is None or length == maxlength: - yield "%s/%d" % (prefix, length) - else: - yield "%s/%d-%d" % (prefix, length, maxlength) - - def __str__(self): - return "%s %s %s" % (self.signingTime(), self.getASID(), " ".join(self.prefixes)) - -parser = argparse.ArgumentParser(description = __doc__) -parser.add_argument("rcynic_dir", nargs = "+", type = check_dir, - help = "rcynic authenticated output directory") -args = parser.parse_args() - -for rcynic_dir in args.rcynic_dir: - for root, dirs, files in os.walk(rcynic_dir): - for fn in files: - if fn.endswith(".roa"): - print ROA.parse(os.path.join(root, fn)) + if not os.path.isdir(d): + raise argparse.ArgumentTypeError("%r is not a directory" % d) + return d + +class ROA(rpki.POW.ROA): # pylint: disable=W0232 + + @property + def prefixes(self): + v4, v6 = self.getPrefixes() # pylint: disable=E1101 + for prefix, length, maxlength in (v4 or ()) + (v6 or ()): + if maxlength is None or length == maxlength: + yield "%s/%d" % (prefix, length) + else: + yield "%s/%d-%d" % (prefix, length, maxlength) + + def __str__(self): + # pylint: disable=E1101 + return "%s %s %s" % (self.signingTime(), self.getASID(), " ".join(self.prefixes)) + +cfg = rpki.config.argparser(doc = __doc__) +cfg.argparser.add_argument("rcynic_dir", nargs = "?", type = check_dir, + help = "rcynic authenticated output directory") +args = cfg.argparser.parse_args() + +for uri, roa in authenticated_objects(args.rcynic_dir, + uri_suffix = ".roa", + class_map = dict(roa = ROA)): + roa.extractWithoutVerifying() + print roa |