Changeset 388


Ignore:
Timestamp:
16/11/04 11:53:56 (15 years ago)
Author:
lawrence
Message:

More functionality, now returns the trusted host list ok, and reads
an xml file with the roles etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • security/trunk/python/AAmap.py

    r381 r388  
    33#    Q Public License, version 1.0 or later 
    44# 
    5 # Version 0.1 BNL November 12, 2004 
    6 # At versions < 1 we expect the input mapping file to consist of three 
    7 # element tuples, comma seperated 
    8 #    remotehost remoterole localrole 
    9 # Note that the remotehost should be the a string which includes 
    10 # the distinguished name of the remote host, as serialised by the 
    11 # AttributeToken code. 
     5# Version 0.1 BNL November 16, 2004 
     6# Format of AAmap file described on wiki. 
    127 
    138from UserDict import UserDict 
     
    2722    ''' 
    2823     
    29     def __init__(self,path2mapfile,path2ourDN): 
    30         # we will need this for later 
     24    def __init__(self,path2mapfile,ourpkeyfile): 
     25        ''' Instantiate the AAmap instance, by loading our map file, 
     26        and our own private keys''' 
     27        # we will need these for later 
    3128        self._inputpath=path2mapfile 
    32         # get our own DN From a file, only needed once 
    33         f=open(path2ourDN,'r') 
    34         self.US=X500DN 
    35         self.US.deserialise(f.readline()) 
     29        self._ourkey=ourpkeyfile 
     30        # go get the pki stuff 
     31        self._loadourkey() 
    3632        # now go get the map 
    3733        self._rolemap={} 
     
    3935        self._read() 
    4036 
     37    def _loadourkey(self): 
     38        ''' Load the pki certificates and handle them ''' 
     39        # obviously lots of new code to go here 
     40        self.US=X500DN('CN=testing testing 1.2.3') 
     41        pass 
     42         
    4143    def _read(self): 
    4244        ''' Open and read the mapping information from a file, by 
    4345        making two internal indices for efficiency: one dictionary 
    4446        keyed by remotehost, and one keyed by localrole''' 
    45         f=open(self._inputpath,'r') 
    46         lines=f.readlines() 
    47         rh=X500DN() 
    48         for line in lines: 
    49             (remotehost,remoterole,localrole)=line.split(',') 
    50             remotehostDN=rh.deserialise(remotehost) 
    51             #first for the getTrustedHosts 
    52             if localrole in self._getmap.keys(): 
    53                 self._getmap[localrole].append(remotehost) 
    54             else: 
    55                 self._getmap[localrole]=[remotehost] 
    56             # and now to do the map 
    57             if remotehost in self._rolemap.keys(): 
    58                 self._rolemap[remotehost][remoterole:localrole] 
    59             else: 
    60                 self._rolemap[remotehost]={remoterole:localrole} 
    61         f.close() 
     47 
     48        def getText(nodelist): 
     49            rc = "" 
     50            for node in nodelist: 
     51                if node.nodeType == node.TEXT_NODE: 
     52                    rc = rc + node.data 
     53            return rc 
     54 
     55        # here we'll use minidom, so I learn about it, and because 
     56        # it's lightweight 
     57        from xml.dom import minidom 
     58        doc=minidom.parse(self._inputpath) 
     59        trusted=doc.getElementsByTagName("trusted") 
     60        for host in trusted: 
     61            remotehost=host.getAttribute("name") 
     62            signatureFile=host.getElementsByTagName( 
     63                "signatureFile")[0].firstChild.data 
     64            roles=host.getElementsByTagName("role") 
     65            for role in roles: 
     66                remoterole,localrole=(role.getAttribute("remote"), 
     67                              role.getAttribute("local")) 
     68                print remotehost,remoterole,localrole 
     69                #first for the getTrustedHosts 
     70                if localrole in self._getmap.keys(): 
     71                    # only biff it in, if we haven't already added that host 
     72                    if remotehost not in self._getmap[localrole]: 
     73                        self._getmap[localrole].append(remotehost) 
     74                else: 
     75                    self._getmap[localrole]=[remotehost] 
     76                # and now to do the map 
     77                if remotehost in self._rolemap.keys(): 
     78                    self._rolemap[remotehost][remoterole]=localrole 
     79                else: 
     80                    self._rolemap[remotehost]={remoterole:localrole} 
     81        doc.unlink() 
    6282 
    6383    def restart(self): 
    64         ''' Reread the information from the file ''' 
     84        ''' Reread the configuration information from the files ''' 
    6585        self._getmap.clear() 
    6686        self._rolemap.clear() 
    6787        self._read() 
     88        self._loadcerts() 
    6889    # 
    6990    # public methods 
     
    84105        newToken.sign() 
    85106        # serialise back into XML and give it back 
    86         return newToken.toxml() 
     107        return newToken.xml() 
    87108        ### How do we mark it as a time-limited attribute certificate ??? ### 
    88109     
    89110    def getTrustedHosts(self,role): 
    90         #needs to be serialised into XML 
     111        #needs to be serialised into XML, or does it ... done for you ... 
    91112        list=self._getmap[role] 
    92113        return list 
     
    96117 
    97118    print 'AAmap tests wont work yet ... need some input file ' 
    98     map=AAmap('mapfile','ourDN') 
    99  
     119    map=AAmap('map_config.xml','ourcert') 
     120    print map.getTrustedHosts('nerc') 
     121    # can't test the att cert map until we understand the file handling. 
    100122     
    101123 
Note: See TracChangeset for help on using the changeset viewer.