aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2013-08-05 06:00:46 +0000
committerRob Austein <sra@hactrn.net>2013-08-05 06:00:46 +0000
commitd001195c62e3f5c53969f57b698c87feed02da75 (patch)
tree473fb1307df1c3190f458d2c36b06ea439b93b20
parent7e30343e5a25ead3071da5ed03cfb4df2112f801 (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
-rwxr-xr-xscripts/rp-sqlite52
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):