diff options
author | Rob Austein <sra@hactrn.net> | 2013-08-05 06:00:46 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2013-08-05 06:00:46 +0000 |
commit | d001195c62e3f5c53969f57b698c87feed02da75 (patch) | |
tree | 473fb1307df1c3190f458d2c36b06ea439b93b20 /scripts/rp-sqlite | |
parent | 7e30343e5a25ead3071da5ed03cfb4df2112f801 (diff) |
Add marker byte to be sure that IP addresses can't be confused with
ASNs in our unified range table. Clean up unneeded debugging code.
svn path=/trunk/; revision=5447
Diffstat (limited to 'scripts/rp-sqlite')
-rwxr-xr-x | scripts/rp-sqlite | 52 |
1 files changed, 23 insertions, 29 deletions
diff --git a/scripts/rp-sqlite b/scripts/rp-sqlite index ba892ae6..aacd6522 100755 --- a/scripts/rp-sqlite +++ b/scripts/rp-sqlite @@ -40,24 +40,18 @@ fn2map = dict(cer = rpki.x509.X509, roa = rpki.x509.ROA, gbr = rpki.x509.Ghostbuster) +sqlite3.register_adapter(rpki.POW.IPAddress, + lambda x: buffer("_" + x.toBytes())) + +sqlite3.register_converter("RangeVal", + lambda s: long(s) if s.isdigit() else rpki.POW.IPAddress.fromBytes(s[1:])) + + def main(): db, cur = initialize_database() test(cur) db.close() -sqlite3.register_adapter(rpki.POW.IPAddress, lambda x: buffer(x.toBytes())) - -#sqlite3.register_converter("IPAddress", rpki.POW.IPAddress.fromBytes) - -def RangeVal_converter(s): - if s.isdigit(): - v = long(s) - else: - v = rpki.POW.IPAddress.fromBytes(s) - print "+ %r => %r" % (s, v) - return v - -sqlite3.register_converter("RangeVal", RangeVal_converter) def test(cur): print "Testing" @@ -87,6 +81,7 @@ def test(cur): for r in find_by_resource_bag(cur, rpki.resource_set.resource_bag.from_str(expr)): print r, r.uris + def find_by_ski(cur, ski, fn2 = None): return find_results(cur, fn2, """ @@ -96,6 +91,7 @@ def find_by_ski(cur, ski, fn2 = None): """, buffer(ski)) + def find_by_aki(cur, aki, fn2 = None): return find_results(cur, fn2, """ @@ -105,11 +101,13 @@ def find_by_aki(cur, aki, fn2 = None): """, buffer(aki)) + # It's easiest to understand overlap conditions by understanding # non-overlap then inverting and and applying De Morgan's law. Ranges # A and B do not overlap if either A.min > B.max or A.max < B.min; # therefore they do overlap if A.min <= B.max and A.max >= B.min. + def find_by_as_range(cur, as_min, as_max, fn2 = None): return find_results(cur, fn2, """ @@ -120,6 +118,7 @@ def find_by_as_range(cur, as_min, as_max, fn2 = None): as_min, as_max) + def find_by_ip_range(cur, ip_min, ip_max, fn2 = None): return find_results(cur, fn2, """ @@ -130,31 +129,26 @@ def find_by_ip_range(cur, ip_min, ip_max, fn2 = None): rpki.POW.IPAddress(ip_min), rpki.POW.IPAddress(ip_max)) + def find_by_resource_bag(cur, bag, fn2 = None): + assert bag.asn or bag.v4 or bag.v6 qset = [] aset = [] - - assert bag.asn or bag.v4 or bag.v6 - for rset in (bag.asn, bag.v4, bag.v6): if rset: for r in rset: qset.append("(? <= max AND ? >= min)") aset.append(r.min) aset.append(r.max) - - q = """ - SELECT object.id, fn2, der - FROM object, range - WHERE object.id = range.id AND (%s) - GROUP BY object.id - """ % (" OR ".join(qset)) - - if False: - print "+ query:", q - print "+ args: ", repr(aset) - - return find_results(*([cur, fn2, q] + aset)) + return find_results(*([ + cur, fn2, + """ + SELECT object.id, fn2, der + FROM object, range + WHERE object.id = range.id AND (%s) + GROUP BY object.id + """ % (" OR ".join(qset)) + ] + aset)) def find_results(cur, fn2, query, *args): |