aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2013-10-08 20:55:03 +0000
committerRob Austein <sra@hactrn.net>2013-10-08 20:55:03 +0000
commit8eff52b93dfe75ee94c8f32270a881bf30efef0a (patch)
tree508878d31161337ba64ba483be3140881e51964c /scripts
parentfc63444706858f39ba33929084bd0f2240e29ad8 (diff)
Checkpoint.
svn path=/trunk/; revision=5556
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/rcynic-lta78
1 files changed, 46 insertions, 32 deletions
diff --git a/scripts/rcynic-lta b/scripts/rcynic-lta
index 13a9b316..45d62382 100755
--- a/scripts/rcynic-lta
+++ b/scripts/rcynic-lta
@@ -228,7 +228,9 @@ class main(object):
# more refactoring than I feel like doing this late in the day.
#
self.rpdb.cur.execute("SELECT fn2, der, uri FROM outgoing WHERE issuer = ?", (self.ltacer.rowid,))
- names_and_objs = [(uri, OutgoingObject.create(rpdb = self.rpdb, rowid = None, fn2 = fn2, der = der, uri = uri))
+ names_and_objs = [(uri, OutgoingObject.create(fn2 = fn2, der = der, uri = uri,
+ rpdb = None, rowid = None,
+ subject_id = None, issuer_id = None))
for fn2, der, uri in self.rpdb.cur.fetchall()]
mft = OutgoingSignedManifest.build(
@@ -312,11 +314,13 @@ class BaseObject(object):
rpki.x509.DER_object.
"""
- _rpdb = None
- _rowid = None
- _fn2 = None
- _fn2map = None
- _uri = None
+ _rpdb = None
+ _rowid = None
+ _fn2 = None
+ _fn2map = None
+ _uri = None
+ _subject_id = None
+ _issuer_id = None
@property
def rowid(self):
@@ -344,6 +348,18 @@ class BaseObject(object):
for k, v in map.iteritems():
v._fn2 = k
+ @classmethod
+ def create(cls, rpdb, rowid, fn2, der, uri, subject_id, issuer_id):
+ self = cls._fn2map[fn2]()
+ if der is not None:
+ self.set(DER = der)
+ self._rpdb = rpdb
+ self._rowid = rowid
+ self._uri = uri
+ self._subject_id = subject_id
+ self._issuer_id = issuer_id
+ return self
+
class IncomingObject(BaseObject):
@@ -373,14 +389,17 @@ class IncomingObject(BaseObject):
return cls._fn2map[os.path.splitext(fn)[1][1:]](DER_file = fn)
@classmethod
- def create(cls, rpdb, rowid, fn2, der, uri):
- self = cls._fn2map[fn2](DER = der)
- self._uri = uri
- self._rpdb = rpdb
- self._rowid = rowid
- return self
+ def create(cls, rpdb, rowid, fn2, der, uri, subject_id, issuer_id):
+ assert der is not None
+ return super(IncomingObject, cls).create(rpdb, rowid, fn2, der, uri, subject_id, issuer_id)
+ @property
+ def issuer(self):
+ if self._issuer_id is None or self._issuer_id == self._subject_id:
+ return None
+ return self._rpdb.find_incoming_by_id(self._issuer_id)
+
class OutgoingObject(BaseObject):
@property
@@ -391,17 +410,6 @@ class OutgoingObject(BaseObject):
self._orig_id = None if r is None else r[0]
return self._rpdb.find_incoming_by_id(self._orig_id)
- @classmethod
- def create(cls, rpdb, rowid, fn2, der, uri):
- self = cls._fn2map[fn2]()
- if der is not None:
- self.set(DER = der)
- self._rpdb = rpdb
- self._rowid = rowid
- self._uri = uri
- return self
-
-
class IncomingX509 (rpki.x509.X509, IncomingObject): pass
class IncomingCRL (rpki.x509.CRL, IncomingObject): pass
@@ -463,7 +471,9 @@ class RPDB(object):
CHECK (fn2 IN ('cer', 'crl', 'mft', 'roa', 'gbr')),
uri TEXT NOT NULL,
depth INTEGER,
- deleted INTEGER NOT NULL DEFAULT 0,
+ disposition TEXT NOT NULL
+ DEFAULT 'keep'
+ CHECK (disposition IN ('keep', 'delete', 'replace')),
subject INTEGER
REFERENCES keyname(id)
ON DELETE RESTRICT
@@ -725,12 +735,13 @@ class RPDB(object):
return None
if rowid in self.outgoing_cache:
return self.outgoing_cache[rowid]
- self.cur.execute("SELECT fn2, der, key, uri FROM outgoing WHERE id = ?", (rowid,))
+ self.cur.execute("SELECT fn2, der, key, uri, subject, issuer FROM outgoing WHERE id = ?", (rowid,))
r = self.cur.fetchone()
if r is None:
return None
- fn2, der, key, uri = r
- obj = OutgoingObject.create(rpdb = self, rowid = rowid, fn2 = fn2, der = der, uri = uri)
+ fn2, der, key, uri, subject_id, issuer_id = r
+ obj = OutgoingObject.create(rpdb = self, rowid = rowid, fn2 = fn2, der = der, uri = uri,
+ subject_id = subject_id, issuer_id = issuer_id)
self.outgoing_cache[rowid] = obj
return obj
@@ -798,16 +809,19 @@ class RPDB(object):
if fn2 is not None:
query += " AND fn2 = ?"
args.append(fn2)
- query = "SELECT incoming.id, incoming.fn2, incoming.der, incoming.uri FROM incoming " + query
results = []
- self.cur.execute(query, args)
- selections = self.cur.fetchall()
- for rowid, fn2, der, uri in selections:
+ self.cur.execute("""SELECT incoming.id, incoming.fn2,
+ incoming.der, incoming.uri,
+ incoming.subject, incoming.issuer
+ FROM incoming
+ """ + query, args)
+ for rowid, fn2, der, uri, subject_id, issuer_id in self.cur.fetchall():
if rowid in self.incoming_cache:
obj = self.incoming_cache[rowid]
assert obj.rowid == rowid
else:
- obj = IncomingObject.create(rpdb = self, rowid = rowid, fn2 = fn2, der = der, uri = uri)
+ obj = IncomingObject.create(rpdb = self, rowid = rowid, fn2 = fn2, der = der, uri = uri,
+ subject_id = subject_id, issuer_id = issuer_id)
self.incoming_cache[rowid] = obj
results.append(obj)
return results