# subdirectory are several files:
# *.GID - GID file
# *.PKEY - private key file
-# *.DBINFO - database info
##
import os
gid_object = None
gid_filename = None
privkey_filename = None
- dbinfo_filename = None
##
# Initialize and authority object.
#
# @param xrn the human readable name of the authority (urn will be converted to hrn)
# @param gid_filename the filename containing the GID
# @param privkey_filename the filename containing the private key
- # @param dbinfo_filename the filename containing the database info
- def __init__(self, xrn, gid_filename, privkey_filename, dbinfo_filename):
+ def __init__(self, xrn, gid_filename, privkey_filename):
hrn, type = urn_to_hrn(xrn)
self.hrn = hrn
self.set_gid_filename(gid_filename)
self.privkey_filename = privkey_filename
- self.dbinfo_filename = dbinfo_filename
##
# Set the filename of the GID
def get_pkey_object(self):
return Keypair(filename = self.privkey_filename)
- ##
- # Get the dbinfo in the form of a dictionary
-
- def get_dbinfo(self):
- f = file(self.dbinfo_filename)
- dict = eval(f.read())
- f.close()
- return dict
-
##
# Replace the GID with a new one. The file specified by gid_filename is
# overwritten with the new GID object
#
# The tree is stored on disk in a hierarchical manner than reflects the
# structure of the tree. Each authority is a subdirectory, and each subdirectory
-# contains the GID, pkey, and dbinfo files for that authority (as well as
+# contains the GID and pkey files for that authority (as well as
# subdirectories for each sub-authority)
class Hierarchy:
basedir = os.path.join(self.config.SFA_DATA_DIR, "authorities")
self.basedir = basedir
##
- # Given a hrn, return the filenames of the GID, private key, and dbinfo
+ # Given a hrn, return the filenames of the GID, private key
# files.
#
# @param xrn the human readable name of the authority (urn will be convertd to hrn)
gid_filename = os.path.join(directory, leaf+".gid")
privkey_filename = os.path.join(directory, leaf+".pkey")
- dbinfo_filename = os.path.join(directory, leaf+".dbinfo")
- return (directory, gid_filename, privkey_filename, dbinfo_filename)
+ return (directory, gid_filename, privkey_filename)
##
# Check to see if an authority exists. An authority exists if it's disk
def auth_exists(self, xrn):
hrn, type = urn_to_hrn(xrn)
- (directory, gid_filename, privkey_filename, dbinfo_filename) = \
+ (directory, gid_filename, privkey_filename) = \
self.get_auth_filenames(hrn)
- return os.path.exists(gid_filename) and \
- os.path.exists(privkey_filename) and \
- os.path.exists(dbinfo_filename)
+ return os.path.exists(gid_filename) and os.path.exists(privkey_filename)
##
# Create an authority. A private key for the authority and the associated
# @param create_parents if true, also create the parents if they do not exist
def create_auth(self, xrn, create_parents=False):
- hrn, type = urn_to_hrn(xrn)
+ hrn, type = urn_to_hrn(str(xrn))
logger.debug("Hierarchy: creating authority: %s"% hrn)
# create the parent authority if necessary
parent_urn = hrn_to_urn(parent_hrn, 'authority')
if (parent_hrn) and (not self.auth_exists(parent_urn)) and (create_parents):
self.create_auth(parent_urn, create_parents)
-
- (directory, gid_filename, privkey_filename, dbinfo_filename) = \
+ (directory, gid_filename, privkey_filename,) = \
self.get_auth_filenames(hrn)
# create the directory to hold the files
gid = self.create_gid(xrn, create_uuid(), pkey)
gid.save_to_file(gid_filename, save_parents=True)
- # XXX TODO: think up a better way for the dbinfo to work
-
- dbinfo = Config().get_plc_dbinfo()
- dbinfo_file = file(dbinfo_filename, "w")
- dbinfo_file.write(str(dbinfo))
- dbinfo_file.close()
-
def create_top_level_auth(self, hrn=None):
"""
Create top level records (includes root and sub authorities (local/remote)
"""
- if not hrn:
- hrn = self.config.SFA_INTERFACE_HRN
-
- # make sure parent exists
- parent_hrn = get_authority(hrn)
- if not parent_hrn:
- parent_hrn = hrn
- if not parent_hrn == hrn:
- self.create_top_level_auth(parent_hrn)
-
# create the authority if it doesnt alrady exist
if not self.auth_exists(hrn):
- self.create_auth(hrn)
+ self.create_auth(hrn, create_parents=True)
def get_interface_auth_info(self, create=True):
logger.warning("Hierarchy: missing authority - xrn=%s, hrn=%s"%(xrn,hrn))
raise MissingAuthority(hrn)
- (directory, gid_filename, privkey_filename, dbinfo_filename) = \
+ (directory, gid_filename, privkey_filename, ) = \
self.get_auth_filenames(hrn)
- auth_info = AuthInfo(hrn, gid_filename, privkey_filename, dbinfo_filename)
+ auth_info = AuthInfo(hrn, gid_filename, privkey_filename)
# check the GID and see if it needs to be refreshed
gid = auth_info.get_gid_object()
def create_gid(self, xrn, uuid, pkey, CA=False):
hrn, type = urn_to_hrn(xrn)
+ if not type:
+ type = 'authority'
parent_hrn = get_authority(hrn)
# Using hrn_to_urn() here to make sure the urn is in the right format
# If xrn was a hrn instead of a urn, then the gid's urn will be
# of type None
urn = hrn_to_urn(hrn, type)
gid = GID(subject=hrn, uuid=uuid, hrn=hrn, urn=urn)
-
# is this a CA cert
if hrn == self.config.SFA_INTERFACE_HRN or not parent_hrn:
# root or sub authority