diff options
author | Rob Austein <sra@hactrn.net> | 2012-02-17 21:53:03 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2012-02-17 21:53:03 +0000 |
commit | 84dd133ca6bb55e14725074e700eca9f8d845edf (patch) | |
tree | d205eb727b52172b4a065a7b8496884b00d4f85f /rpkid/rpki/publication.py | |
parent | faa7ce891439f07e467d44573b883ef6cdfa03fa (diff) |
Revoke certificates and clean up published objects when processing a
left-right destroy action. Clean up empty publication directories on
withdrawal. Fix rootd's handling of CRLs and manifests. See #197.
svn path=/trunk/; revision=4354
Diffstat (limited to 'rpkid/rpki/publication.py')
-rw-r--r-- | rpkid/rpki/publication.py | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/rpkid/rpki/publication.py b/rpkid/rpki/publication.py index 14e3d36a..f60e3af5 100644 --- a/rpkid/rpki/publication.py +++ b/rpkid/rpki/publication.py @@ -219,7 +219,7 @@ class publication_object_elt(rpki.xml_utils.base_elt, publication_namespace): def serve_withdraw(self): """ - Withdraw an object. + Withdraw an object, then recursively delete empty directories. """ rpki.log.info("Withdrawing %s" % self.uri) filename = self.uri_to_filename() @@ -230,6 +230,15 @@ class publication_object_elt(rpki.xml_utils.base_elt, publication_namespace): raise rpki.exceptions.NoObjectAtURI, "No object published at %s" % self.uri else: raise + min_path_len = len(self.gctx.publication_base.rstrip("/")) + dirname = os.path.dirname(filename) + while len(dirname) > min_path_len: + try: + os.rmdir(dirname) + except OSError: + break + else: + dirname = os.path.dirname(dirname) def uri_to_filename(self): """ |