From b132a73f15e432eaf43310fce9196ca0c0651465 Mon Sep 17 00:00:00 2001 From: <> Date: Thu, 2 Jan 2003 05:25:50 +0000 Subject: This commit was manufactured by cvs2svn to create branch 'Release_2_1-maint'. --- bin/newlist | 219 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100755 bin/newlist (limited to 'bin/newlist') diff --git a/bin/newlist b/bin/newlist new file mode 100755 index 00000000..503783d9 --- /dev/null +++ b/bin/newlist @@ -0,0 +1,219 @@ +#! @PYTHON@ +# +# Copyright (C) 1998,1999,2000,2001,2002 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +"""Create a new, unpopulated mailing list. + +Usage: %(PROGRAM)s [options] [listname [listadmin-addr [admin-password]]] + +Options: + + -l language + --language language + Make the list's preferred language `language', which must be a two + letter language code. + + -q/--quiet + Normally the administrator is notified by email (after a prompt) that + their list has been created. This option suppresses the prompt and + notification. + + -h/--help + Print this help text and exit. + +You can specify as many of the arguments as you want on the command line: +you will be prompted for the missing ones. + +Every Mailman list has two parameters which define the default host name for +outgoing email, and the default URL for all web interfaces. When you +configured Mailman, certain defaults were calculated, but if you are running +multiple virtual Mailman sites, then the defaults may not be appropriate for +the list you are creating. + +You can specify the domain to create your new list in by spelling the listname +like so: + + mylist@www.mydom.ain + +where `www.mydom.ain' should be the base hostname for the URL to this virtual +hosts's lists. E.g. with is setting people will view the general list +overviews at http://www.mydom.ain/mailman/listinfo. Also, www.mydom.ain +should be a key in the VIRTUAL_HOSTS mapping in mm_cfg.py/Defaults.py. It +will be looked up to give the email hostname. If this can't be found, then +www.mydom.ain will be used for both the web interface and the email +interface. + +If you spell the list name as just `mylist', then the email hostname will be +taken from DEFAULT_EMAIL_HOST and the url will be taken from DEFAULT_URL (as +defined in your Defaults.py file or overridden by settings in mm_cfg.py). + +Note that listnames are forced to lowercase. +""" + +import sys +import os +import getpass +import getopt +import sha + +import paths +from Mailman import mm_cfg +from Mailman import MailList +from Mailman import Utils +from Mailman import Errors +from Mailman import Message +from Mailman import i18n + +_ = i18n._ + +PROGRAM = sys.argv[0] + + + +def usage(code, msg=''): + if code: + fd = sys.stderr + else: + fd = sys.stdout + print >> fd, _(__doc__) + if msg: + print >> fd, msg + sys.exit(code) + + + +def main(): + try: + opts, args = getopt.getopt(sys.argv[1:], 'hql:', + ['help', 'quiet', 'language=']) + except getopt.error, msg: + usage(1, msg) + + lang = mm_cfg.DEFAULT_SERVER_LANGUAGE + quiet = 0 + for opt, arg in opts: + if opt in ('-h', '--help'): + usage(0) + if opt in ('-q', '--quiet'): + quiet = 1 + if opt in ('-l', '--language'): + lang = arg + + # Is the language known? + if lang not in mm_cfg.LC_DESCRIPTIONS.keys(): + usage(1, _('Unknown language: %(lang)s')) + + if len(args) > 0: + listname = args[0] + else: + listname = raw_input(_('Enter the name of the list: ')) + listname = listname.lower() + + host_name = None + web_page_url = None + if '@' in listname: + listname, domain = listname.split('@', 1) + host_name = mm_cfg.VIRTUAL_HOSTS.get(domain, domain) + web_page_url = mm_cfg.DEFAULT_URL_PATTERN % domain + + if Utils.list_exists(listname): + usage(1, _('List already exists: %(listname)s')) + + if len(args) > 1: + owner_mail = args[1] + else: + owner_mail = raw_input( + _('Enter the email of the person running the list: ')) + + if len(args) > 2: + listpasswd = args[2] + else: + listpasswd = getpass.getpass(_('Initial %(listname)s password: ')) + # List passwords cannot be empty + listpasswd = listpasswd.strip() + if not listpasswd: + usage(1, _('The list password cannot be empty')) + + mlist = MailList.MailList() + try: + pw = sha.new(listpasswd).hexdigest() + # Guarantee that all newly created files have the proper permission. + # proper group ownership should be assured by the autoconf script + # enforcing that all directories have the group sticky bit set + oldmask = os.umask(002) + try: + try: + mlist.Create(listname, owner_mail, pw) + finally: + os.umask(oldmask) + except Errors.BadListNameError, s: + usage(1, _('Illegal list name: %(s)s')) + except Errors.MMBadEmailError, s: + usage(1, _('Bad owner email address: %(s)s')) + except Errors.MMListAlreadyExistsError: + usage(1, _('List already exists: %(listname)s')) + + # Assign domain-specific attributes + if host_name: + mlist.host_name = host_name + mlist.web_page_url = web_page_url + + # And assign the preferred language + mlist.preferred_language = lang + + mlist.Save() + finally: + mlist.Unlock() + + # Now do the MTA-specific list creation tasks + if mm_cfg.MTA: + modname = 'Mailman.MTA.' + mm_cfg.MTA + __import__(modname) + sys.modules[modname].create(mlist) + + # And send the notice to the list owner + if not quiet: + print _('Hit enter to notify %(listname)s owner...'), + sys.stdin.readline() + siteadmin = Utils.get_site_email(mlist.host_name, 'admin') + text = Utils.maketext( + 'newlist.txt', + {'listname' : listname, + 'password' : listpasswd, + 'admin_url' : mlist.GetScriptURL('admin', absolute=1), + 'listinfo_url': mlist.GetScriptURL('listinfo', absolute=1), + 'requestaddr' : mlist.GetRequestEmail(), + 'siteowner' : siteadmin, + }, mlist=mlist) + # Set the I18N language to the list's preferred language so the header + # will match the template language. Stashing and restoring the old + # translation context is just (healthy? :) paranoia. + otrans = i18n.get_translation() + i18n.set_language(mlist.preferred_language) + try: + msg = Message.UserNotification( + owner_mail, siteadmin, + _('Your new mailing list: %(listname)s'), + text, mlist.preferred_language) + msg.send(mlist) + finally: + i18n.set_translation(otrans) + + + +if __name__ == '__main__': + main() -- cgit v1.2.3