+import ConfigParser
+import os
+from cam import cert
+from cam import ca
+
+
+class ConfigError(Exception):
+ pass
+
+
+def read_config(filename):
+ parser = ConfigParser.ConfigParser()
+ if not parser.read(filename):
+ raise ConfigError('File not found: %s' % filename)
+ root_dir = os.path.dirname(os.path.abspath(filename))
+ global_config = {}
+ if parser.has_section('global'):
+ global_config = dict(parser.items('global'))
+ root_dir = global_config.get('root_dir', root_dir)
+ ca_obj = ca.CA(root_dir, dict(parser.items('ca')))
+ certs = []
+ for section in parser.sections():
+ if section in ('ca', 'global'):
+ continue
+ certs.append(cert.Cert(ca_obj, section, dict(parser.items(section))))
+ return global_config, ca_obj, certs