# Copyright (C) 2001-2008 by the Free Software Foundation, Inc.
#
# This file is part of GNU Mailman.
#
# GNU Mailman 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 3 of the License, or (at your option)
# any later version.
#
# GNU Mailman 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
# GNU Mailman. If not, see .
"""Utilities for list creation/deletion hooks."""
import os
import pwd
from mailman.configuration import config
def getusername():
username = os.environ.get('USER') or os.environ.get('LOGNAME')
if not username:
import pwd
username = pwd.getpwuid(os.getuid())[0]
if not username:
username = ''
return username
def _makealiases_mailprog(mlist):
wrapper = os.path.join(config.WRAPPER_DIR, 'mailman')
# Most of the list alias extensions are quite regular. I.e. if the
# message is delivered to listname-foobar, it will be filtered to a
# program called foobar. There are two exceptions:
#
# 1) Messages to listname (no extension) go to the post script.
# 2) Messages to listname-admin go to the bounces script. This is for
# backwards compatibility and may eventually go away (we really have no
# need for the -admin address anymore).
#
# Seed this with the special cases.
listname = mlist.internal_name()
fqdn_listname = mlist.fqdn_listname
aliases = [
(listname, '"|%s post %s"' % (wrapper, fqdn_listname)),
]
for ext in ('admin', 'bounces', 'confirm', 'join', 'leave', 'owner',
'request', 'subscribe', 'unsubscribe'):
aliases.append(('%s-%s' % (listname, ext),
'"|%s %s %s"' % (wrapper, ext, fqdn_listname)))
return aliases
def _makealiases_maildir(mlist):
maildir = config.MAILDIR_DIR
listname = mlist.internal_name()
fqdn_listname = mlist.fqdn_listname
if not maildir.endswith('/'):
maildir += '/'
# Deliver everything using maildir style. This way there's no mail
# program, no forking and no wrapper necessary!
#
# Note, don't use this unless your MTA leaves the envelope recipient in
# Delivered-To:, Envelope-To:, or Apparently-To:
aliases = [(listname, maildir)]
for ext in ('admin', 'bounces', 'confirm', 'join', 'leave', 'owner',
'request', 'subscribe', 'unsubscribe'):
aliases.append(('%s-%s' % (listname, ext), maildir))
return aliases
# XXX This won't work if Mailman.MTA.Utils is imported before the
# configuration is loaded.
if config.USE_MAILDIR:
makealiases = _makealiases_maildir
else:
makealiases = _makealiases_mailprog