mailman/mailman.patch

Wed, 25 Feb 2009 19:23:10 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 25 Feb 2009 19:23:10 +0100
changeset 115
ec005c58d27f
child 371
3d7d8c68b2fc
permissions
-rw-r--r--

Import new package specs for introduction into repository.
The purpose of these packages are for flash video manipulation,
something seemingly missing from the current mtasc, haxe, sswf,
swftools, and adobeflex packages.

     1 Index: Mailman/Archiver/pipermail.py
     2 --- Mailman/Archiver/pipermail.py.orig	2008-06-30 18:29:46 +0200
     3 +++ Mailman/Archiver/pipermail.py	2008-07-01 20:48:10 +0200
     4 @@ -122,9 +122,9 @@
     5          parentID = article.parentID
     6          if parentID is not None and self.articleIndex.has_key(parentID):
     7              parent = self.getArticle(archive, parentID)
     8 -            myThreadKey = parent.threadKey + article.date + '-'
     9 +            myThreadKey = parent.threadKey + article.date + '/' + article.msgid + '-'
    10          else:
    11 -            myThreadKey = article.date + '-'
    12 +            myThreadKey = article.date + '/' + article.msgid + '-'
    13          article.threadKey = myThreadKey
    14          key = myThreadKey, article.msgid
    15          self.setThreadKey(archive, key, article.msgid)
    16 @@ -418,7 +418,7 @@
    17                  else:
    18                      parent = self.database.getArticle(self.archive,
    19                                                      article.parentID)
    20 -                    article.threadKey = parent.threadKey+article.date+'-'
    21 +                    article.threadKey = parent.threadKey + article.date + '/' + article.msgid + '-'
    22                  self.database.setThreadKey(self.archive,
    23                      (article.threadKey, article.msgid),
    24                      msgid)
    25 @@ -632,9 +632,9 @@
    26              article.parentID = parentID = self.get_parent_info(arch, article)
    27              if parentID:
    28                  parent = self.database.getArticle(arch, parentID)
    29 -                article.threadKey = parent.threadKey + article.date + '-'
    30 +                article.threadKey = parent.threadKey + article.date + '/' + article.msgid + '-'
    31              else:
    32 -                article.threadKey = article.date + '-'
    33 +                article.threadKey = article.date + '/' + article.msgid + '-'
    34              key = article.threadKey, article.msgid
    36              self.database.setThreadKey(arch, key, article.msgid)
    37 Index: Mailman/Commands/cmd_subscribe.py
    38 --- Mailman/Commands/cmd_subscribe.py.orig	2008-06-30 18:29:46 +0200
    39 +++ Mailman/Commands/cmd_subscribe.py	2008-07-01 20:48:10 +0200
    40 @@ -84,6 +84,7 @@
    41      if password is None:
    42          password = Utils.MakeRandomPassword()
    43      if address is None:
    44 +        h = None
    45          realname, address = parseaddr(res.msg['from'])
    46          if not address:
    47              # Fall back to the sender address
    48 Index: Mailman/HTMLFormatter.py
    49 --- Mailman/HTMLFormatter.py.orig	2008-06-30 18:29:46 +0200
    50 +++ Mailman/HTMLFormatter.py	2008-07-01 20:48:10 +0200
    51 @@ -44,7 +44,7 @@
    52          realname = self.real_name
    53          hostname = self.host_name
    54          listinfo_link  = Link(self.GetScriptURL('listinfo'), realname).Format()
    55 -        owner_link = Link('mailto:' + self.GetOwnerEmail(), ownertext).Format()
    56 +        owner_link = Link('mailto:' + self.GetOwnerEmail(), realname + '-owner').Format()
    57          innertext = _('%(listinfo_link)s list run by %(owner_link)s')
    58          return Container(
    59              '<hr>',
    60 Index: Mailman/Handlers/Decorate.py
    61 --- Mailman/Handlers/Decorate.py.orig	2008-06-30 18:29:46 +0200
    62 +++ Mailman/Handlers/Decorate.py	2008-07-01 20:48:10 +0200
    63 @@ -197,6 +197,7 @@
    64      del msg['content-transfer-encoding']
    65      del msg['content-disposition']
    66      msg['Content-Type'] = 'multipart/mixed'
    67 +    msg['Mime-version'] = '1.0'
    71 Index: Mailman/Handlers/Scrubber.py
    72 --- Mailman/Handlers/Scrubber.py.orig	2008-06-30 18:29:46 +0200
    73 +++ Mailman/Handlers/Scrubber.py	2008-07-01 20:48:10 +0200
    74 @@ -385,6 +385,8 @@
    75                      t = unicode(t, 'ascii', 'replace')
    76                  try:
    77                      # Should use HTML-Escape, or try generalizing to UTF-8
    78 +                    if len(charset) == 0:
    79 +                        charset = 'us-ascii'
    80                      t = t.encode(charset, 'replace')
    81                  except (UnicodeError, LookupError, ValueError,
    82                          AssertionError):
    83 Index: Mailman/Queue/OutgoingRunner.py
    84 --- Mailman/Queue/OutgoingRunner.py.orig	2008-06-30 18:29:46 +0200
    85 +++ Mailman/Queue/OutgoingRunner.py	2008-07-01 20:48:10 +0200
    86 @@ -89,6 +89,7 @@
    87                  syslog('error', 'Cannot connect to SMTP server %s on port %s',
    88                         mm_cfg.SMTPHOST, port)
    89                  self.__logged = True
    90 +            self._snooze(0)
    91              return True
    92          except Errors.SomeRecipientsFailed, e:
    93              # Handle local rejects of probe messages differently.
    94 Index: Mailman/htmlformat.py
    95 --- Mailman/htmlformat.py.orig	2008-06-30 18:29:46 +0200
    96 +++ Mailman/htmlformat.py	2008-07-01 20:48:10 +0200
    97 @@ -300,7 +300,8 @@
    98          charset = 'us-ascii'
    99          if self.language:
   100              charset = Utils.GetCharSet(self.language)
   101 -        output = ['Content-Type: text/html; charset=%s\n' % charset]
   102 +        output = ['Content-Type: text/html; charset=%s' % charset]
   103 +        output.append('Cache-control: no-cache\n')
   104          if not self.suppress_head:
   105              kws.setdefault('bgcolor', self.bgcolor)
   106              tab = ' ' * indent
   107 Index: bin/check_perms
   108 --- bin/check_perms.orig	2008-06-30 18:29:46 +0200
   109 +++ bin/check_perms	2008-07-01 20:48:10 +0200
   110 @@ -82,7 +82,7 @@
   111      return os.stat(path)[ST_MODE]
   113  def statgidmode(path):
   114 -    stat = os.stat(path)
   115 +    stat = os.lstat(path)
   116      return stat[ST_MODE], stat[ST_GID]
   118  seen = {}
   119 Index: bin/config_list
   120 --- bin/config_list.orig	2008-06-30 18:29:46 +0200
   121 +++ bin/config_list	2008-07-01 20:48:10 +0200
   122 @@ -307,6 +307,11 @@
   123                                      in mm_cfg.OPTINFO.items()
   124                                      if validval & bitval]
   125                      gui._setValue(mlist, k, validval, fakedoc)
   126 +                    # Ugly hack, but seems to be needed since
   127 +                    # new_member_options isn't really a number in gui.
   128 +                    # -- tfheen, 2003-12-06
   129 +                    if k == "new_member_options":
   130 +                        mlist.new_member_options = validval
   131              # BAW: when to do gui._postValidate()???
   132      finally:
   133          if savelist and not checkonly:
   134 Index: bin/mailmanctl
   135 --- bin/mailmanctl.orig	2008-06-30 18:29:46 +0200
   136 +++ bin/mailmanctl	2008-07-01 20:48:10 +0200
   137 @@ -417,6 +417,13 @@
   138          # won't be opening any terminal devices, don't do the ultra-paranoid
   139          # suggestion of doing a second fork after the setsid() call.
   140          os.setsid()
   141 +
   142 +        # Be sure to close any open std{in,out,err}
   143 +        devnull = os.open('/dev/null', 0)
   144 +        os.dup2(devnull, 0)
   145 +        os.dup2(devnull, 1)
   146 +        os.dup2(devnull, 2)
   147 +
   148          # Instead of cd'ing to root, cd to the Mailman installation home
   149          os.chdir(mm_cfg.PREFIX)
   150          # Set our file mode creation umask
   151 Index: bin/newlist
   152 --- bin/newlist.orig	2008-06-30 18:29:46 +0200
   153 +++ bin/newlist	2008-07-01 20:48:10 +0200
   154 @@ -87,6 +87,9 @@
   155  defined in your Defaults.py file or overridden by settings in mm_cfg.py).
   157  Note that listnames are forced to lowercase.
   158 +
   159 +The list admin address need to be a fully-qualified address, like
   160 +owner@example.com, not just owner.
   161  """
   163  import sys
   164 @@ -94,6 +97,7 @@
   165  import getpass
   166  import getopt
   167  import sha
   168 +import grp
   170  import paths
   171  from Mailman import mm_cfg
   172 @@ -122,6 +126,9 @@
   175  def main():
   176 +    gid = grp.getgrnam(mm_cfg.MAILMAN_GROUP)[2]
   177 +    if os.getgid() != mm_cfg.MAILMAN_GROUP:
   178 +        os.setgid(gid)
   179      try:
   180          opts, args = getopt.getopt(sys.argv[1:], 'hql:u:e:',
   181                                     ['help', 'quiet', 'language=',
   182 @@ -203,7 +210,7 @@
   183          except Errors.BadListNameError, s:
   184              usage(1, _('Illegal list name: %(s)s'))
   185          except Errors.EmailAddressError, s:
   186 -            usage(1, _('Bad owner email address: %(s)s'))
   187 +            usage(1, _('Bad owner email address: %(s)s.  Owner addresses need to be fully-qualified names, like "owner@example.com", not just "owner".'))
   188          except Errors.MMListAlreadyExistsError:
   189              usage(1, _('List already exists: %(listname)s'))
   191 Index: bin/update
   192 --- bin/update.orig	2008-06-30 18:29:46 +0200
   193 +++ bin/update	2008-07-01 20:48:10 +0200
   194 @@ -552,9 +552,11 @@
   195      file20 = os.path.join(mm_cfg.DATA_DIR, 'pending_subscriptions.db')
   196      file214 = os.path.join(mm_cfg.DATA_DIR, 'pending.pck')
   197      db = None
   198 +    ver = None
   199      # Try to load the Mailman 2.0 file
   200      try:
   201          fp = open(file20)
   202 +        ver = "20"
   203      except IOError, e:
   204          if e.errno <> errno.ENOENT: raise
   205      else:
   206 @@ -566,6 +568,7 @@
   207          # Try to load the Mailman 2.1.x where x < 5, file
   208          try:
   209              fp = open(file214)
   210 +            ver = "214"
   211          except IOError, e:
   212              if e.errno <> errno.ENOENT: raise
   213          else:
   214 @@ -599,8 +602,12 @@
   215              # data[0] is the address being unsubscribed
   216              addrops_by_address.setdefault(data[0], []).append((key, val))
   217          elif op == Pending.SUBSCRIPTION:
   218 -            # data[0] is a UserDesc object
   219 -            addr = data[0].address
   220 +            if ver == "20":
   221 +                # data is tuple (emailaddr, password, digest)
   222 +                addr = data[0]
   223 +            else:
   224 +                # data[0] is a UserDesc object
   225 +                addr = data[0].address
   226              subs_by_address.setdefault(addr, []).append((key, val))
   227          elif op == Pending.RE_ENABLE:
   228              # data[0] is the mailing list's internal name
   229 Index: scripts/driver
   230 --- scripts/driver.orig	2008-06-30 18:29:46 +0200
   231 +++ scripts/driver	2008-07-01 20:48:10 +0200
   232 @@ -95,6 +95,15 @@
   233          module = getattr(pkg, scriptname)
   234          main = getattr(module, 'main')
   235          try:
   236 +            import os
   237 +            request_method = os.environ.get('REQUEST_METHOD')
   238 +            if not request_method in ['GET', 'POST', 'HEAD']:
   239 +                print "Status: 405 Method not allowed"
   240 +                print "Content-type: text/plain"
   241 +                print
   242 +                print "The method is not allowed"
   243 +                sys.exit()
   244 +                
   245              try:
   246                  sys.stderr = logger
   247                  sys.stdout = tempstdout

mercurial