Skip to content
Snippets Groups Projects
Select Git revision
  • 8c6d1aff59d821f8d3421c4568fdaeeb6c8234c7
  • noblogs default
  • noblogs-5.7.1
  • upstream
  • noblogs-5.7
  • noblogs-5.6new
  • upstream5.5.1
  • noblogs28dic
  • upstream28dic
  • noblogs-5.5.1
  • noblogs-5.4.2
  • noblogs-5.4_seconda
  • noblogs-5.4
  • noblogs-7c
  • wp5.2.3p3
  • mergedbconf
  • noblogs-5.7.1
  • noblogs.5.7.0p1
  • noblogs-5.7.0
  • noblogs-5.6p3
  • noblogs5.6p2
  • noblogs-5.6p1
  • noblogs-5.6
  • noblogs-5.4.2p1
  • noblogs-5.4.2
  • noblogs-5.4.1
  • noblogs-5.4
  • noblogs-p5.4
  • noblogs-5.3.2p2
  • noblogs-5.3.2p1
  • noblogs-5.3.2
  • noblogs-5.3
  • noblogs-5.2.3p4
  • noblogs-5.2.3p3
  • noblogs-5.2.3p2
  • noblogs-5.2.3p1
36 results

unittest.js

Blame
  • auto 3.66 KiB
    # -*- python -*-
    #
    # Copyright (C) 2000-2018 by the Free Software Foundation, Inc.
    #
    # This program is free software; you can redistribute it and/or
    # modify it under the terms of the GNU General Public License
    # as published by the Free Software Foundation; either version 2
    # of the License, or (at your option) any later version.
    # 
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    # 
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software 
    # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    
    """Automatically send a message to a mailing list.
    """
    
    # To use with Postfix, set the following in your main.cf file:
    #
    # recipient_delimiter = +
    # luser_relay = mm+$user@yourdomain.com
    # owner_request_special = no
    
    import sys
    import os
    import time
    
    import paths
    from Mailman import mm_cfg
    from Mailman import Utils
    from Mailman import MailList
    from Mailman import Errors
    from Mailman.Queue.sbcache import get_switchboard
    from Mailman.Logging.Utils import LogStdErr
    
    # Error code if it's really not a Mailman list addr destination
    EX_NOUSER = 67
    
    LogStdErr('auto', 'auto')
    
    DISPOSE_MAP = {None     : 'tolist',
                   'request': 'torequest',
                   'admin'  : 'toadmin',
                   'owner'  : 'toadmin',
                   }
    
    
    
    def fqdn_listname(listname, hostname):
        return ('%s@%s' % (listname, hostname)).lower()
    
    
    
    def main():
        # Postfix sets some environment variables based on information gleaned
        # from the original message.  This is the most direct way to figure out
        # which list the message was intended for.
        extension = os.environ.get('EXTENSION', '').lower()
        i = extension.rfind('-')
        if i < 0:
            listname = extension
            subdest = 'tolist'
        else:
            missing = []
            listname = extension[:i]
            subdest = DISPOSE_MAP.get(extension[i+1:], missing)
            if not Utils.list_exists(listname) or subdest is missing:
                # must be a list that has a `-' in it's name
                listname = extension
                subdest = 'tolist'
        if not listname:
            print >> sys.stderr, 'Empty list name (someone being subversive?)'
            return EX_NOUSER
        try:
            mlist = MailList.MailList(listname, lock=0)
        except Errors.MMListError:
            print >> sys.stderr, 'List not found:', listname
            return EX_NOUSER
    
        # Make sure that the domain part of the incoming address matches the
        # domain of the mailing list.  Actually, it's possible that one or the
        # other is more fully qualified, and thus longer.  So we split the domains
        # by dots, reverse them and make sure that whatever parts /are/ defined
        # for both are equivalent.
        domain = os.environ.get('DOMAIN', '').lower()
        domainp = domain.split('.')
        hostname = mlist.host_name.split('.')
        domainp.reverse()
        hostname.reverse()
        for ca, cb in zip(domainp, hostname):
            if ca <> cb:
                print >> sys.stderr, 'Domain mismatch: %s@%s (expected @%s)' \
                      % (listname, domain, mlist.host_name)
                return EX_NOUSER
    
        if subdest is None:
            print >> sys.stderr, 'Bad sub-destination:', extension
            return EX_NOUSER
    
        inq = get_switchboard(mm_cfg.INQUEUE_DIR)
        inq.enqueue(sys.stdin.read(),
                    listname=listname,
                    received_time=time.time(),
                    _plaintext=1,
                    **{subdest: 1})
        return 0
    
    
    
    if __name__ == '__main__':
        code = main()
        sys.exit(code)