1
2
3
4
5
6 import os
7 import ConfigParser
8
9 from lib.cuckoo.common.constants import CUCKOO_ROOT
10 from lib.cuckoo.common.exceptions import CuckooOperationalError
11 from lib.cuckoo.common.objects import Dictionary
12
14 """Configuration file parser."""
15
16 - def __init__(self, file_name="cuckoo", cfg=None):
17 """
18 @param file_name: file name without extension.
19 @param cfg: configuration file path.
20 """
21 env = {}
22 for key, value in os.environ.items():
23 if key.startswith("CUCKOO_"):
24 env[key] = value
25
26 config = ConfigParser.ConfigParser(env)
27
28 if cfg:
29 config.read(cfg)
30 else:
31 config.read(os.path.join(CUCKOO_ROOT, "conf", "%s.conf" % file_name))
32
33 for section in config.sections():
34 setattr(self, section, Dictionary())
35 for name, raw_value in config.items(section):
36 try:
37
38
39
40
41 if config.get(section, name) in ["0", "1"]:
42 raise ValueError
43
44 value = config.getboolean(section, name)
45 except ValueError:
46 try:
47 value = config.getint(section, name)
48 except ValueError:
49 value = config.get(section, name)
50
51 setattr(getattr(self, section), name, value)
52
53 - def get(self, section):
54 """Get option.
55 @param section: section to fetch.
56 @raise CuckooOperationalError: if section not found.
57 @return: option value.
58 """
59 try:
60 return getattr(self, section)
61 except AttributeError as e:
62 raise CuckooOperationalError("Option %s is not found in "
63 "configuration, error: %s" %
64 (section, e))
65
67 """Parse the analysis options field to a dictionary."""
68 ret = {}
69 for field in options.split(","):
70 if "=" not in field:
71 continue
72
73 key, value = field.split("=", 1)
74 ret[key.strip()] = value.strip()
75 return ret
76
78 """Emit the analysis options from a dictionary to a string."""
79 return ",".join("%s=%s" % (k, v) for k, v in options.items())
80