aboutsummaryrefslogtreecommitdiff
path: root/scripts/rp-sqlite
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 /scripts/rp-sqlite
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
Diffstat (limited to 'scripts/rp-sqlite')
-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):