]> git.decadent.org.uk Git - dak.git/commitdiff
Merge branch 'master' into pu/backports-merge
authorAnsgar Burchardt <ansgar@debian.org>
Mon, 17 Sep 2012 14:27:33 +0000 (16:27 +0200)
committerAnsgar Burchardt <ansgar@debian.org>
Mon, 17 Sep 2012 14:27:33 +0000 (16:27 +0200)
1  2 
daklib/config.py
daklib/utils.py

diff --combined daklib/config.py
index 99b84dd605bea42040435c23d8eb177d3f9f1000,65874250906bc74a3f485a348faaeec1648af4bc..339604a1a60f275fda8c10954ecb3f1dde33792d
@@@ -28,7 -28,6 +28,7 @@@ Config access clas
  
  ################################################################################
  
 +import grp
  import os
  import apt_pkg
  import socket
@@@ -77,19 -76,6 +77,19 @@@ class Config(object)
          if conffile:
              apt_pkg.read_config_file_isc(self.Cnf, conffile)
  
 +        # Read group-specific options
 +        if 'ByGroup' in self.Cnf:
 +            bygroup = self.Cnf.subtree('ByGroup')
 +            groups = set([os.getgid()])
 +            groups.update(os.getgroups())
 +
 +            for group in bygroup.list():
 +                gid = grp.getgrnam(group).gr_gid
 +                if gid in groups:
 +                    if bygroup.get(group):
 +                        apt_pkg.read_config_file_isc(self.Cnf, bygroup[group])
 +                    break
 +
          # Rebind some functions
          # TODO: Clean this up
          self.get = self.Cnf.get
          for field in [('db_revision',      None,       int),
                        ('defaultsuitename', 'unstable', str),
                        ('exportpath',       '',         str),
-                       ('unprivgroup',      None,       str)
+                       ('unprivgroup',      None,       str),
+                       ('use_extfiles',     None,       int)
                        ]:
              setattr(self, 'get_%s' % field[0], lambda s=None, x=field[0], y=field[1], z=field[2]: self.get_db_value(x, y, z))
              setattr(Config, '%s' % field[0], property(fget=getattr(self, 'get_%s' % field[0])))
diff --combined daklib/utils.py
index ec9296527934cf2abd32a47e8a9c1a6111f37375,63d8f471e6a773f9d4fe0ba70a6fe218707ad058..1034628ea217ce39b383d0feed9ddce67ad4c90a
@@@ -43,7 -43,6 +43,7 @@@ import email as modemai
  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, \
@@@ -604,16 -603,8 +604,16 @@@ def build_package_list(dsc, session = N
  
  ################################################################################
  
 -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:
          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"]
                              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)
  
@@@ -1513,7 -1503,8 +1513,8 @@@ def temp_dirname(parent=None, prefix="d
      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 tfname
  
  ################################################################################
@@@ -1551,7 -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
  
  ################################################################################