Ticket #884: repo-validate.patch

File repo-validate.patch, 1.9 KB (added by solj, 13 years ago)
  • src/sbin/bcfg2-repo-validate

    diff --git a/src/sbin/bcfg2-repo-validate b/src/sbin/bcfg2-repo-validate
    index 685916f..6d13975 100755
    a b if __name__ == '__main__': 
    8181    pkgcfg_list = glob.glob("%s/Packages/config.xml" % repo) 
    8282    gp_list = glob.glob('%s/GroupPatterns/config.xml' % repo) 
    8383 
     84    # verify attributes for configuration entries 
     85    # (as defined in doc/server/configurationentries) 
     86    # TODO: See if it is possible to do this in the schema instead 
     87    configuration_attrs = { 
     88            'device':['name', 'owner', 'group', 'dev_type'], 
     89            'directory':['name', 'owner', 'group', 'perms'], 
     90            'file':['name', 'owner', 'group', 'perms', 'encoding', 'empty'], 
     91            'hardlink':['name', 'to'], 
     92            'symlink':['name', 'to'], 
     93            'ignore':['name'], 
     94            'nonexist':['name'], 
     95            'permissions':['name', 'owner', 'group', 'perms']} 
     96    for rfile in rules_list: 
     97        try: 
     98            xdata = lxml.etree.parse(rfile) 
     99        except lxml.etree.XMLSyntaxError, e: 
     100            print("Failed to parse %s: %s" % (plist, e)) 
     101        for posixpath in xdata.findall("//Path"): 
     102            pathname = posixpath.get('name') 
     103            pathtype = posixpath.get('type') 
     104            pathset = set(posixpath.attrib.keys()) 
     105            try: 
     106                required_attrs = set(configuration_attrs[pathtype] \ 
     107                                     + ['type']) 
     108            except KeyError: 
     109                continue 
     110            if pathset.issuperset(required_attrs): 
     111                continue 
     112            else: 
     113                print("The following required attributes are missing for" 
     114                      " Path %s in %s: %s" % (pathname, rfile, 
     115                      [attr for attr in required_attrs.difference(pathset)])) 
     116 
    84117    # warn on duplicate Pkgmgr entries with the same priority 
    85118    pset = set() 
    86119    for plist in pkg_list: