aboutsummaryrefslogtreecommitdiffstats
path: root/bin/newlist
diff options
context:
space:
mode:
author <>2003-01-02 05:25:50 +0000
committer <>2003-01-02 05:25:50 +0000
commitb132a73f15e432eaf43310fce9196ca0c0651465 (patch)
treec15f816ba7c4de99fef510e3bd75af0890d47441 /bin/newlist
downloadmailman2-b132a73f15e432eaf43310fce9196ca0c0651465.tar.gz
mailman2-b132a73f15e432eaf43310fce9196ca0c0651465.tar.xz
mailman2-b132a73f15e432eaf43310fce9196ca0c0651465.zip
This commit was manufactured by cvs2svn to create branch
'Release_2_1-maint'.
Diffstat (limited to 'bin/newlist')
-rwxr-xr-xbin/newlist219
1 files changed, 219 insertions, 0 deletions
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()