X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Futils.py;h=1034628ea217ce39b383d0feed9ddce67ad4c90a;hb=1617994b76d0cd90ce89a7e6d9f7bb886439f010;hp=63d8f471e6a773f9d4fe0ba70a6fe218707ad058;hpb=50349d329a1a6453b7fbe158bcb22a2f71f60b98;p=dak.git diff --git a/daklib/utils.py b/daklib/utils.py index 63d8f471..1034628e 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, \ @@ -603,8 +604,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 +633,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 +667,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) @@ -1542,14 +1552,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 ################################################################################