X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Futils.py;h=899c16f4677e8b2d29a4523d5bed68496e4e2199;hb=91b516fcb3c1d1e9e591d95bff213a0554c54946;hp=63d8f471e6a773f9d4fe0ba70a6fe218707ad058;hpb=7163dc558d3b55eba7029cc57741af3e6532d372;p=dak.git diff --git a/daklib/utils.py b/daklib/utils.py index 63d8f471..899c16f4 100755 --- a/daklib/utils.py +++ b/daklib/utils.py @@ -43,6 +43,7 @@ import email as modemail import subprocess import ldap +import daklib.config as config from dbconn import DBConn, get_architecture, get_component, get_suite, \ get_override_type, Keyring, session_wrapper, \ get_active_keyring_paths, get_primary_keyring_path, \ @@ -64,7 +65,6 @@ from collections import defaultdict ################################################################################ default_config = "/etc/dak/dak.conf" #: default dak config, defines host properties -default_apt_config = "/etc/dak/apt.conf" #: default apt config, not normally used alias_cache = None #: Cache for email alias checks key_uid_email_cache = {} #: Cache for email addresses from gpg key uids @@ -603,8 +603,16 @@ def build_package_list(dsc, session = None): ################################################################################ -def send_mail (message, filename=""): - """sendmail wrapper, takes _either_ a message string or a file as arguments""" +def send_mail (message, filename="", whitelists=None): + """sendmail wrapper, takes _either_ a message string or a file as arguments + + @type whitelists: list of (str or None) + @param whitelists: path to whitelists. C{None} or an empty list whitelists + everything, otherwise an address is whitelisted if it is + included in any of the lists. + In addition a global whitelist can be specified in + Dinstall::MailWhiteList. + """ maildir = Cnf.get('Dir::Mail') if maildir: @@ -624,23 +632,24 @@ def send_mail (message, filename=""): os.write (fd, message) os.close (fd) - if Cnf.has_key("Dinstall::MailWhiteList") and \ - Cnf["Dinstall::MailWhiteList"] != "": + if whitelists is None or None in whitelists: + whitelists = [] + if Cnf.get('Dinstall::MailWhiteList', ''): + whitelists.append(Cnf['Dinstall::MailWhiteList']) + if len(whitelists) != 0: message_in = open_file(filename) message_raw = modemail.message_from_file(message_in) message_in.close(); whitelist = []; - whitelist_in = open_file(Cnf["Dinstall::MailWhiteList"]) - try: + for path in whitelists: + with open_file(path, 'r') as whitelist_in: for line in whitelist_in: if not re_whitespace_comment.match(line): if re_re_mark.match(line): whitelist.append(re.compile(re_re_mark.sub("", line.strip(), 1))) else: whitelist.append(re.compile(re.escape(line.strip()))) - finally: - whitelist_in.close() # Fields to check. fields = ["To", "Bcc", "Cc"] @@ -657,7 +666,7 @@ def send_mail (message, filename=""): mail_whitelisted = 1 break if not mail_whitelisted: - print "Skipping %s since it's not in %s" % (item, Cnf["Dinstall::MailWhiteList"]) + print "Skipping {0} since it's not whitelisted".format(item) continue match.append(item) @@ -770,7 +779,7 @@ def which_conf_file (): homedir = os.getenv("HOME") confpath = os.path.join(homedir, "/etc/dak.conf") if os.path.exists(confpath): - apt_pkg.ReadConfigFileISC(Cnf,confpath) + apt_pkg.read_config_file_isc(Cnf,confpath) # We are still in here, so there is no local config file or we do # not allow local files. Do the normal stuff. @@ -779,20 +788,6 @@ def which_conf_file (): return default_config -def which_apt_conf_file (): - res = socket.getfqdn() - # In case we allow local config files per user, try if one exists - if Cnf.find_b("Config::" + res + "::AllowLocalConfig"): - homedir = os.getenv("HOME") - confpath = os.path.join(homedir, "/etc/dak.conf") - if os.path.exists(confpath): - apt_pkg.ReadConfigFileISC(Cnf,default_config) - - if Cnf.get("Config::" + res + "::AptConfig"): - return Cnf["Config::" + res + "::AptConfig"] - else: - return default_apt_config - def which_alias_file(): hostname = socket.getfqdn() aliasfn = '/var/lib/misc/'+hostname+'/forward-alias' @@ -1542,14 +1537,7 @@ def get_changes_files(from_dir): ################################################################################ -apt_pkg.init() - -Cnf = apt_pkg.Configuration() -if not os.getenv("DAK_TEST"): - apt_pkg.read_config_file_isc(Cnf,default_config) - -if which_conf_file() != default_config: - apt_pkg.read_config_file_isc(Cnf,which_conf_file()) +Cnf = config.Config().Cnf ################################################################################ @@ -1619,7 +1607,7 @@ def get_packages_from_ftp(root, suite, component, architecture): if (result != 0): fubar("Gunzip invocation failed!\n%s\n" % (output), result) packages = open_file(temp_file) - Packages = apt_pkg.ParseTagFile(packages) + Packages = apt_pkg.TagFile(packages) os.unlink(temp_file) return Packages @@ -1753,7 +1741,7 @@ def check_reverse_depends(removals, suite, arches=None, session=None, cruft=Fals if package in removals: continue parsed_dep = [] try: - parsed_dep += apt_pkg.ParseDepends(deps[package]) + parsed_dep += apt_pkg.parse_depends(deps[package]) except ValueError as e: print "Error for package %s: %s" % (package, e) for dep in parsed_dep: @@ -1822,7 +1810,7 @@ def check_reverse_depends(removals, suite, arches=None, session=None, cruft=Fals # Remove [arch] information since we want to see breakage on all arches build_dep = re_build_dep_arch.sub("", build_dep) try: - parsed_dep += apt_pkg.ParseDepends(build_dep) + parsed_dep += apt_pkg.parse_depends(build_dep) except ValueError as e: print "Error for source %s: %s" % (source, e) for dep in parsed_dep: @@ -1834,7 +1822,7 @@ def check_reverse_depends(removals, suite, arches=None, session=None, cruft=Fals component, = session.query(Component.component_name) \ .join(Component.overrides) \ .filter(Override.suite == overridesuite) \ - .filter(Override.package == source) \ + .filter(Override.package == re.sub('/(contrib|non-free)$', '', source)) \ .join(Override.overridetype).filter(OverrideType.overridetype == 'dsc') \ .first() if component != "main":