X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Futils.py;h=084ac195bad036266d869de61b2933e752562612;hb=52eb03dccab0a9898bca4d36a0a96ebe377fb977;hp=25d768d10f9fb442e6497190c9e2249a80d4e527;hpb=56c0f386e8da9aaac70dcb60a5eb1ef9a9e38877;p=dak.git diff --git a/daklib/utils.py b/daklib/utils.py index 25d768d1..084ac195 100755 --- a/daklib/utils.py +++ b/daklib/utils.py @@ -27,6 +27,7 @@ import datetime import email.Header import os import pwd +import grp import select import socket import shutil @@ -42,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, \ @@ -602,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: @@ -623,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"] @@ -656,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) @@ -778,20 +789,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' @@ -1468,7 +1465,8 @@ def temp_filename(directory=None, prefix="dak", suffix="", mode=None, group=None if mode: os.chmod(tfname, mode) if group: - os.chown(tfname, -1, group) + gid = grp.getgrnam(group).gr_gid + os.chown(tfname, -1, gid) return (tfd, tfname) ################################################################################ @@ -1497,12 +1495,13 @@ def temp_dirname(parent=None, prefix="dak", suffix="", mode=None, group=None): """ - (tfd, tfname) = tempfile.mkdtemp(suffix, prefix, parent) + tfname = tempfile.mkdtemp(suffix, prefix, parent) if mode: os.chmod(tfname, mode) if group: - os.chown(tfname, -1, group) - return (tfd, tfname) + gid = grp.getgrnam(group).gr_gid + os.chown(tfname, -1, gid) + return tfname ################################################################################ @@ -1539,14 +1538,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 ################################################################################ @@ -1831,7 +1823,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":