[ezmlm-web] directory structure

This commit is contained in:
io 2005-01-26 01:26:27 +00:00
parent 7ab4285d69
commit c1c7ccc97a
54 changed files with 3948 additions and 0 deletions

14
ezmlm-web/README Normal file
View file

@ -0,0 +1,14 @@
This repository contains the development code of ezmlm-web
* trunk - the development area
* tags - released versions since 2.1
* website - the website for https://systemausfall.org/toolforge/ezmlm-web
* contrib-patches - incoming patches from users (including the ones, that were sent to Guy)
the website of ezmlm-web can be found at:
https://systemausfall.org/toolforge/ezmlm-web
the original website of ezmlm-web's creator Guy Antony Halse is available at:
http://rucus.ru.ac.za/~guy/ezmlm/
send questions and recommondations to ezmlm-web@sumpfralle.de

View file

@ -0,0 +1,27 @@
Source of most patches:
http://rucus.ru.ac.za/~guy/ezmlm/contrib/
all ezmlm-pm-patchs refer to Mail::Ezmlm -> ignored
1) ezmlm-web-andrew-pam-20030520.txt
- tooltip texts -> this is already fixed
- xhtml-tags in lowercase -> fixed in rev 26
2) ezmlm-web-andrew-pam-20040526.txt
- untaint mail-adresses -> better suited for Mail::Ezmlm -> ignored
3) ezmlm-web-gordon-rowell-20011024.txt
- delete only allowd, if user may create lists -> ignored
4) ezmlm-web-jose-celestino-20020208.txt
- support for newsletters -> ignored (for now)
- domain-based acl -> ignored
- filtered subscribers list for huge lists -> ignored (for now)
-----------------------------------------------
############ directory Policy #################
* done - patches that were incorporated
* ignored - patches, that were ignored
* open - these patches are not yet implemented/examined

View file

@ -0,0 +1,422 @@
From xanni@kira.glasswings.com.au Tue May 20 16:09:12 2003
Return-Path: <xanni@kira.glasswings.com.au>
Delivered-To: guy-ezmlm@rucus.ru.ac.za
Received: (qmail 98840 invoked from network); 20 May 2003 14:09:12 -0000
Received: from mail011.syd.optusnet.com.au (210.49.20.139)
by server.rucus.ru.ac.za with SMTP; 20 May 2003 14:09:12 -0000
Received: from kira.glasswings.com.au (c16443.eburwd3.vic.optusnet.com.au [210.49.192.62])
by mail011.syd.optusnet.com.au (8.11.6p2/8.11.6) with ESMTP id h4KE93X08963
for <guy-ezmlm@rucus.ru.ac.za>; Wed, 21 May 2003 00:09:03 +1000
Received: (from xanni@localhost)
by kira.glasswings.com.au (8.9.3/8.9.3) id AAA18521
for guy-ezmlm@rucus.ru.ac.za; Wed, 21 May 2003 00:18:02 +1000
Date: Wed, 21 May 2003 00:18:01 +1000
From: Andrew Pam <xanni@glasswings.com.au>
To: guy-ezmlm@rucus.ru.ac.za
Subject: Bug fixes for ezmlm-web
Message-ID: <20030520141801.GM599@kira.glasswings.com.au>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.4i
Status: RO
Content-Length: 24092
I found the following problems when installing ezmlm-web v2.1:
* Many browsers do not provide any visible display of alt tags, so the
help icons are not usable without some JavaScript
* There were several HTML errors in the output of the script, such as
mismatched tags, misspelled attributes and missing quotes around attributes
* The CGI module now outputs XHTML, which requires that all tags be lowercase
Here is a patch which addresses all these issues:
--- ezmlm-web.cgi Tue Sep 26 06:58:08 2000
+++ /usr/local/bin/ezmlm-web.cgi Wed May 21 00:07:32 2003
@@ -1,6 +1,9 @@
-#!/usr/bin/perl -T
+#!/usr/bin/perl -Tw
#===========================================================================
# ezmlm-web.cgi - version 2.1 - 25/09/2000
+# 20/05/2003 Andrew Pam <xanni@sericyb.com.au>
+# Fixed HTML errors, changed all HTML to lowercase for XHTML
+# Added sub help_icon and sub help_option for non-tooltip browsers
# $Id: ezmlm-web.cgi,v 1.3 2000/09/25 19:58:07 guy Exp $
#
# Copyright (C) 1999/2000, Guy Antony Halse, All Rights Reserved.
@@ -239,7 +242,7 @@
&list_text;
} else {
- print "<H1 ALIGN=CENTER>$Q::action</H1><H2 ALIGN=CENTER>$LANGUAGE{'nop'}</H2><HR ALIGN=center WIDTH=25%>";
+ print "<h1 align=\"center\">$Q::action</h1><h2 align=\"center\">$LANGUAGE{'nop'}</h2><hr align=\"center\" width=\"25%\">";
}
# Print HTML footer and exit :) ...
@@ -280,15 +283,15 @@
$q->delete_all;
print $q->startform;
print $q->hidden(-name=>'state', -default=>'select');
- print '<CENTER><TABLE BORDER="0" CELLPADDING="10"><TR><TD ALIGN="center" VALIGN="top" ROWSPAN="2">';
+ print '<center><table border="0" cellpadding="10"><tr><td align="center" valign="top" rowspan="2">';
print $q->scrolling_list(-name=>'list', -size=>$scrollsize, -values=>\@lists) if defined(@lists);
- print '</TD><TD ALIGN="left" VALIGN="top">', $LANGUAGE{'chooselistinfo'};
+ print '</td><td align="left" valign="top">', $LANGUAGE{'chooselistinfo'};
print $q->submit(-name=>'action', -value=>"[$BUTTON{'create'}]"), ' ' if (!defined($opt_c));
print $q->submit(-name=>'action', -value=>"[$BUTTON{'edit'}]"), ' ' if(defined(@lists));
print $q->submit(-name=>'action', -value=>"[$BUTTON{'delete'}]") if(defined(@lists));
- print '</TD></TR><TR><TD> </TD></TR></TABLE></CENTER>';
+ print '</td></tr><tr><td> </td></tr></table></center>';
print $q->endform;
}
@@ -302,9 +305,9 @@
print $q->startform;
print $q->hidden(-name=>'state', -default=>'confirm_delete');
print $q->hidden(-name=>'list', -default=>$q->param('list'));
- print '<H2 ALIGN="center">', $LANGUAGE{'confirmdelete'}, ' ', $q->param('list'), '</H3><BR><CENTER>';
+ print '<h2 align="center">', $LANGUAGE{'confirmdelete'}, ' ', $q->param('list'), '</h2><br><center>';
print $q->submit(-name=>'confirm', -value=>"[$BUTTON{'no'}]"), ' ';
- print $q->submit(-name=>'confirm', -value=>"[$BUTTON{'yes'}]"), '</CENTER>';
+ print $q->submit(-name=>'confirm', -value=>"[$BUTTON{'yes'}]"), '</center>';
}
# ------------------------------------------------------------------------
@@ -327,28 +330,28 @@
# Print out a form of options ...
$q->delete('state');
- print "<H2 ALIGN=center>$LANGUAGE{'subscribersto'} $Q::list ($listaddress)</H2><HR ALIGN=center WIDTH=25%>";
+ print "<h2 align=\"center\">$LANGUAGE{'subscribersto'} $Q::list ($listaddress)</h2><hr align=\"center\" width=\"25%\">";
print $q->start_multipart_form;
- print '<CENTER><TABLE ALIGN="center" CELLPADDING="10"><TR><TD ROWSPAN="2" VALIGN="top" ALIGN="center">';
+ print '<center><table align="center" cellpadding="10"><tr><td rowspan="2" valign="top" align="center">';
print $q->hidden(-name=>'state', -default=>'edit');
print $q->hidden(-name=>'list', -default=>$Q::list);
print $q->scrolling_list(-name=>'delsubscriber', -size=>$scrollsize, -values=>\@subscribers, -labels=>&pretty_names, -multiple=>'true') if defined(@subscribers);
- print '</TD><TD VALIGN="top" ALIGN="left">';
- print ' ', ($#subscribers + 1), ' ', $LANGUAGE{'subscribers'}, '<BR>' if defined(@subscribers);
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'deleteaddress'}]"), '<P>' if defined(@subscribers);
- print $q->textfield(-name=>'addsubscriber', -size=>'40'), ' <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'addaddress'}, '"><BR>';
- print $q->filefield(-name=>'addfile', -size=>20, -maxlength=>100), ' <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'addaddressfile'}, '"><br>' if ($FILE_UPLOAD);
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'addaddress'}]"), '<P>';
- print '<STRONG>', $LANGUAGE{'additionalparts'}, ':</STRONG><BR>' if($list->ismodpost || $list->ismodsub || $list->isremote || $list->isdeny || $list->isallow || $list->isdigest);
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'moderators'}]"), '<IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'moderator'}, '"> ' if ($list->ismodpost || $list->ismodsub || $list->isremote);
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'denylist'}]"), '<IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'deny'}, '"> ' if ($list->isdeny);
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'allowlist'}]"), '<IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'allow'}, '"> ' if ($list->isallow);
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'digestsubscribers'}]"), '<IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'digest'}, '"> ' if ($list->isdigest);
- print '<P>';
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'webarchive'}]"), '<IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'webarch'}, '"> ' if(&ezmlmcgirc);
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'configuration'}]"), '<IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'config'}, '">&nbsp;&nbsp;&nbsp;';
+ print '</td><td valign="top" align="left">';
+ print ' ', ($#subscribers + 1), ' ', $LANGUAGE{'subscribers'}, '<br>' if defined(@subscribers);
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'deleteaddress'}]"), '<p>' if defined(@subscribers);
+ print $q->textfield(-name=>'addsubscriber', -size=>'40'), help_icon('addaddress'), '<br>';
+ print $q->filefield(-name=>'addfile', -size=>20, -maxlength=>100), help_icon('addaddressfile'), '<br>' if ($FILE_UPLOAD);
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'addaddress'}]"), '<p>';
+ print '<strong>', $LANGUAGE{'additionalparts'}, ':</strong><br>' if($list->ismodpost || $list->ismodsub || $list->isremote || $list->isdeny || $list->isallow || $list->isdigest);
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'moderators'}]"), help_icon('moderator'), ' ' if ($list->ismodpost || $list->ismodsub || $list->isremote);
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'denylist'}]"), help_icon('deny'), ' ' if ($list->isdeny);
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'allowlist'}]"), help_icon('allow'), ' ' if ($list->isallow);
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'digestsubscribers'}]"), help_icon('digest'), ' ' if ($list->isdigest);
+ print '<p>';
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'webarchive'}]"), help_icon('webarch'), ' ' if(&ezmlmcgirc);
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'configuration'}]"), help_icon('config'), '&nbsp;&nbsp;&nbsp;';
print $q->submit(-name=>'action', -value=>"[$BUTTON{'selectlist'}]");
- print '</TD></TR><TR><TD> </TD></TR></TABLE></CENTER>';
+ print '</td></tr><tr><td> </td></tr></table></center>';
print $q->endform;
}
@@ -534,15 +537,15 @@
my($subpath) = $config =~ m{8\s*'([^']+)'};
my($remotepath) = $config =~ m{9\s*'([^']+)'};
- $moderated = '<BLINK><FONT COLOR=#ff0000>' if ($postpath);
+ $moderated = '<blink><font color="#ff0000">' if ($postpath);
$moderated .= "[$LANGUAGE{'posting'}]" if ($list->ismodpost);
- $moderated .= '</FONT><IMG SRC="' . $HELP_ICON_URL . '" ALT="Posting Moderators are stored in a non-standard location (' . $postpath . '). You will have to edit them manually."></BLINK>' if ($postpath);
- $moderated .= '<BLINK><FONT COLOR=#ff0000>' if ($subpath);
+ $moderated .= '</font><img src="' . $HELP_ICON_URL . '" alt="Posting Moderators are stored in a non-standard location (' . $postpath . '). You will have to edit them manually."></blink>' if ($postpath);
+ $moderated .= '<blink><font color="#ff0000">' if ($subpath);
$moderated .= " [$LANGUAGE{'subscription'}]" if($list->ismodsub);
- $moderated .= '</FONT><IMG SRC="' . $HELP_ICON_URL . '" ALT="Subscriber Moderators are stored in a non-standard location (' . $subpath . '). You will have to edit them manually"></BLINK>' if ($subpath);
- $moderated .= '<BLINK><FONT COLOR=#ff0000>' if ($remotepath);
+ $moderated .= '</font><img src="' . $HELP_ICON_URL . '" alt="Subscriber Moderators are stored in a non-standard location (' . $subpath . '). You will have to edit them manually"></blink>' if ($subpath);
+ $moderated .= '<blink><font color="#ff0000">' if ($remotepath);
$moderated .= " [$LANGUAGE{'remoteadmin'}]" if($list->isremote);
- $moderated .= '</FONT><IMG SRC="' . $HELP_ICON_URL . '" ALT="Remote Administrators are stored in a non-standard location (' . $remotepath . '). You will have to edit them manually"></BLINK>' if ($remotepath);
+ $moderated .= '</font><img src="' . $HELP_ICON_URL . '" alt="Remote Administrators are stored in a non-standard location (' . $remotepath . '). You will have to edit them manually"></blink>' if ($remotepath);
}
@@ -557,20 +560,20 @@
# Print out a form of options ...
$q->delete('state');
- print "<H2 ALIGN=center>$type $LANGUAGE{'for'} $listaddress</H2><HR ALIGN=center WIDTH=25%>";
- print "<CENTER>$moderated</CENTER><P>" if(defined($moderated));
+ print "<h2 align=\"center\">$type $LANGUAGE{'for'} $listaddress</h2><hr align=\"center\" width=\"25%\">";
+ print "<center>$moderated</center><p>" if(defined($moderated));
print $q->start_multipart_form;
- print '<CENTER><TABLE ALIGN="center" CELLPADDING="10"><TR><TD ROWSPAN="2" VALIGN="top" ALIGN="center">';
+ print '<center><table align="center" cellpadding="10"><tr><td rowspan="2" valign="top" align="center">';
print $q->hidden(-name=>'state', -default=>$part);
print $q->hidden(-name=>'list', -default=>$Q::list), "\n";
print $q->scrolling_list(-name=>'delsubscriber', -size=>$scrollsize, -values=>\@subscribers, -multiple=>'true', -labels=>&pretty_names) if defined(@subscribers);
- print '</TD></TR><TR><TD VALIGN="top" ALIGN="left">';
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'deleteaddress'}]"), '<P>' if defined(@subscribers);
- print $q->textfield(-name=>'addsubscriber', -size=>'40'), ' <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'addaddress'}, '"><BR>';
- print $q->filefield(-name=>'addfile', -size=>20, -maxlength=>100), ' <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'addaddressfile'}, '"><br>' if ($FILE_UPLOAD);
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'addaddress'}]"), '<P>';
+ print '</td></tr><tr><td valign="top" align="left">';
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'deleteaddress'}]"), '<p>' if defined(@subscribers);
+ print $q->textfield(-name=>'addsubscriber', -size=>'40'), help_icon('addaddreess'), '<br>';
+ print $q->filefield(-name=>'addfile', -size=>20, -maxlength=>100), help_icon('addaddressfile'), '<br>' if ($FILE_UPLOAD);
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'addaddress'}]"), '<p>';
print $q->submit(-name=>'action', -value=>"[$BUTTON{'subscribers'}]");
- print '</TD></TR><TR><TD> </TD></TR></TABLE></CENTER>';
+ print '</td></tr><tr><td> </td></tr></table></center>';
print $q->endform;
}
@@ -598,27 +601,26 @@
# Print a form of options ...
$q->delete_all;
- print '<H2 ALIGN=CENTER>', $LANGUAGE{'createnew'}, '</H2><HR ALIGN=center WIDTH=25%>';
+ print '<h2 align="center">', $LANGUAGE{'createnew'}, '</h2><hr align="center" width="25%">';
print $q->startform;
print $q->hidden(-name=>'state', -value=>'create');
- print '<BIG><STRONG>', $LANGUAGE{'listname'}, ': </STRONG></BIG>', $q->textfield(-name=>'list', -size=>'20'), ' <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'listname'}, '"><P>';
- print '<BIG><STRONG>', $LANGUAGE{'listaddress'}, ': </STRONG></BIG>';
+ print '<big><strong>', $LANGUAGE{'listname'}, ': </strong></big>', $q->textfield(-name=>'list', -size=>'20'), help_icon('listname'), '<p>';
+ print '<big><strong>', $LANGUAGE{'listaddress'}, ': </strong></big>';
print $q->textfield(-name=>'inlocal', -default=>$username, -size=>'10');
- print ' <BIG><STRONG>@</STRONG></BIG> ', $q->textfield(-name=>'inhost', -default=>$hostname, -size=>'30'), ' <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'listadd'}, '"><P>';
+ print ' <big><strong>@</strong></big> ', $q->textfield(-name=>'inhost', -default=>$hostname, -size=>'30'), help_icon('listadd'), '<p>';
- print '<P><BIG><STRONG>', $LANGUAGE{'listoptions'}, ':</STRONG></BIG>';
+ print '<p><big><strong>', $LANGUAGE{'listoptions'}, ':</strong></big>';
&display_options($DEFAULT_OPTIONS);
# Allow creation of mysql table if the module allows it
if($Mail::Ezmlm::MYSQL_BASE) {
- print '<P> ', $q->checkbox(-name=>'sql', -label=>$LANGUAGE{'mysqlcreate'}, -on=>1);
- print ' <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'mysqlcreate'}, '">';
+ print '<p> ', $q->checkbox(-name=>'sql', -label=>$LANGUAGE{'mysqlcreate'}, -on=>1), help_icon('mysqlcreate');
}
- print '<P><BIG><STRONG>', $LANGUAGE{'allowedtoedit'}, ': </STRONG></BIG>',
- $q->textfield(-name=>'webusers', -value=>$ENV{'REMOTE_USER'}||'ALL', -size=>'30'), ' <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'webusers'}, '">',
- '<BR><FONT SIZE="-1">', $HELPER{'allowedit'}, '</FONT>'
+ print '<p><big><strong>', $LANGUAGE{'allowedtoedit'}, ': </strong></big>',
+ $q->textfield(-name=>'webusers', -value=>$ENV{'REMOTE_USER'}||'ALL', -size=>'30'), help_icon('webusers'),
+ '<br><font size="-1">', $HELPER{'allowedit'}, '</font>'
if(-e "$LIST_DIR/webusers");
print '<P>', $q->submit(-name=>'action', -value=>"[$BUTTON{'createlist'}]"), ' ';
@@ -647,7 +649,7 @@
# Sanity Checks ...
return 1 if ($listname eq '' || $qmail eq '');
if(-e ("$LIST_DIR/$listname/lock") || -e ("$HOME_DIR/.qmail-$qmail")) {
- print "<H1 ALIGN=CENTER>List '$listname' already exists :(</H1>";
+ print "<h1 align=\"center\">List '$listname' already exists :(</h1>";
return 1;
}
@@ -710,13 +712,13 @@
# Print a form of options ...
$q->delete_all;
- print '<H2 ALIGN="center">', $LANGUAGE{'editconfiguration'}, '</H2><HR ALIGN=center WIDTH=25%>';
+ print '<h2 align="center">', $LANGUAGE{'editconfiguration'}, '</h2><hr align="center" width="25%">';
print $q->startform;
print $q->hidden(-name=>'state', -value=>'configuration');
print $q->hidden(-name=>'list', -value=>$listname);
- print '<BIG><STRONG>', $LANGUAGE{'listname'}, ": <EM>$listname</EM><BR>";
- print "$LANGUAGE{'listaddress'}: <EM>$listaddress</EM></STRONG></BIG><P>";
- print '<BIG><STRONG>', $LANGUAGE{'listoptions'}, ':</BIG></STRONG><BR>';
+ print '<big><strong>', $LANGUAGE{'listname'}, ": <em>$listname</em><br>";
+ print "$LANGUAGE{'listaddress'}: <em>$listaddress</em></strong></big><p>";
+ print '<big><strong>', $LANGUAGE{'listoptions'}, ':</big></strong><br>';
# Print a list of options, selecting the ones that apply to this list ...
&display_options($list->getconfig);
@@ -727,10 +729,10 @@
$mimeremove = $list->getpart('mimeremove');
$prefix = $list->getpart('prefix');
- print '<P><BIG><STRONG>', $LANGUAGE{'prefix'}, ': </STRONG></BIG>', $q->textfield(-name=>'prefix', -default=>$prefix, -size=>12), ' <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'prefix'}, '">' if defined($prefix);
- print '<P><BIG><STRONG>', $LANGUAGE{'headerremove'}, ':</BIG></STRONG> <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'headerremove'}, '"><BR>', $q->textarea(-name=>'headerremove', -default=>$headerremove, -rows=>5, -columns=>70);
- print '<P><BIG><STRONG>', $LANGUAGE{'headeradd'}, ':</BIG></STRONG> <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'headeradd'}, '"><BR>', $q->textarea(-name=>'headeradd', -default=>$headeradd, -rows=>5, -columns=>70);
- print '<P><BIG><STRONG>', $LANGUAGE{'mimeremove'}, ':</BIG></STRONG> <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'mimeremove'}, '"><BR>', $q->textarea(-name=>'mimeremove', -default=>$mimeremove, -rows=>5, -columns=>70) if defined($mimeremove);
+ print '<p><big><strong>', $LANGUAGE{'prefix'}, ': </strong></big>', $q->textfield(-name=>'prefix', -default=>$prefix, -size=>12), help_icon('prefix') if defined($prefix);
+ print '<p><big><strong>', $LANGUAGE{'headerremove'}, ':</big></strong> ', help_icon('headerremove'), '<br>', $q->textarea(-name=>'headerremove', -default=>$headerremove, -rows=>5, -columns=>70);
+ print '<p><big><strong>', $LANGUAGE{'headeradd'}, ':</big></strong> ', help_icon('headeradd'), '<br>', $q->textarea(-name=>'headeradd', -default=>$headeradd, -rows=>5, -columns=>70);
+ print '<p><big><strong>', $LANGUAGE{'mimeremove'}, ':</big></strong> ', help_icon('mimeremove'), '<br>', $q->textarea(-name=>'mimeremove', -default=>$mimeremove, -rows=>5, -columns=>70) if defined($mimeremove);
if(open(WEBUSER, "<$LIST_DIR/webusers")) {
my($webusers);
@@ -740,13 +742,13 @@
close WEBUSER;
$webusers ||= $ENV{'REMOTE_USER'} || 'ALL';
- print '<P><BIG><STRONG>', $LANGUAGE{'allowedtoedit'}, ': </STRONG></BIG>',
- $q->textfield(-name=>'webusers', -value=>$webusers, -size=>'30'), ' <IMG SRC="', $HELP_ICON_URL, '" ALT="', $HELPER{'webusers'}, '">',
- '<BR><FONT SIZE="-1">', $HELPER{'allowedit'}, '</FONT>';
+ print '<p><big><strong>', $LANGUAGE{'allowedtoedit'}, ': </strong></big>',
+ $q->textfield(-name=>'webusers', -value=>$webusers, -size=>'30'), help_icon('webusers'),
+ '<br><font size="-1">', $HELPER{'allowedit'}, '</font>';
}
- print '<P>', $q->submit(-name=>'action', -value=>"[$BUTTON{'updateconfiguration'}]"), ' ';
+ print '<p>', $q->submit(-name=>'action', -value=>"[$BUTTON{'updateconfiguration'}]"), ' ';
print $q->reset(-value=>"[$BUTTON{'resetform'}]"), ' ';
print $q->submit(-name=>'action', -value=>"[$BUTTON{'cancel'}]"), ' ';
print $q->submit(-name=>'action', -value=>"[$BUTTON{'edittexts'}]");
@@ -841,12 +843,12 @@
print $q->startform;
print $q->hidden(-name=>'state', -default=>'list_text');
print $q->hidden(-name=>'list', -default=>$q->param('list'));
- print '<CENTER><TABLE BORDER="0" CELLPADDING="10" ALIGN="center"><TR><TD ALIGN="center" VALIGN="top" ROWSPAN="2">';
+ print '<center><table border="0" cellpadding="10" align="center"><tr><td align="center" valign="top" rowspan="2">';
print $q->scrolling_list(-name=>'file', -values=>\@files);
- print '</TD><TD ALIGN="center" VALIGN="top">';
+ print '</td><td align="center" valign="top">';
print $q->submit(-name=>'action', -value=>"[$BUTTON{'editfile'}]"), ' ';
print $q->submit(-name=>'action', -value=>"[$BUTTON{'cancel'}]");
- print '<P>', $LANGUAGE{'edittextinfo'}, '</TD></TR><TR><TD> </TD></TR></TABLE></CENTER>';
+ print '<p>', $LANGUAGE{'edittextinfo'}, '</td></tr><tr><td> </td></tr></table></center>';
print $q->endform;
}
@@ -862,20 +864,20 @@
# Print a form ...
$q->delete('state');
- print '<H2 ALIGN="CENTER">', $LANGUAGE{'editingfile'}, ': ', $Q::file, '</H2>';
- print '<CENTER><TABLE ALIGN="center" CELLPADDING="5"><TR><TD VALIGN="top" ROWSPAN="2">';
+ print '<h2 align="center">', $LANGUAGE{'editingfile'}, ': ', $Q::file, '</h2>';
+ print '<center><table align="center" cellpadding="5"><tr><td valign="top" rowspan="2">';
print $q->startform;
print $q->hidden(-name=>'state', -default=>'edit_text');
print $q->hidden(-name=>'list', -default=>$q->param('list'));
print $q->hidden(-name=>'file', -default=>$q->param('file'));
print $q->textarea(-name=>'content', -default=>$content, -rows=>'25', -columns=>'72');
- print '</TD><TD VALIGN="top" ALIGN="left">';
+ print '</td><td valign="top" align="left">';
print $q->submit(-name=>'action', -value=>"[$BUTTON{'savefile'}]"), ' ';
print $q->reset(-value=>"[$BUTTON{'resetform'}]"), ' ';
print $q->submit(-name=>'action', -value=>"[$BUTTON{'cancel'}]");
- print '<P>', $LANGUAGE{'editfileinfo'};
+ print '<p>', $LANGUAGE{'editfileinfo'};
print $q->endform;
- print '</TD></TR><TR><TD> <TD></TR></TABLE><CENTER>'
+ print '</td></tr><tr><td> <td></tr></table><center>'
}
@@ -915,37 +917,35 @@
my($i, $j);
print "<!-- $opts -->";
- print '<TABLE BORDER="0" CELLPADDING="3"><TR><TD>';
+ print '<table border="0" cellpadding="3"><tr><td>';
foreach $i (grep {/\D/} keys %EZMLM_LABELS) {
if ($opts =~ /^\w*$i\w*\s*/) {
print $q->checkbox(-name=>$i, -value=>$i, -label=>$EZMLM_LABELS{$i}[0], -on=>'1');
} else {
print $q->checkbox(-name=>$i, -value=>$i, -label=>$EZMLM_LABELS{$i}[0]);
}
- print '<IMG SRC="', $HELP_ICON_URL, '" BORDER="0" ALT="', $EZMLM_LABELS{$i}[1] , '">';
- print '</TD>'; $j++;
+ print help_option($i), '</td>'; $j++;
if ($j >= 3) {
- $j = 0; print '</TR><TR>';
+ $j = 0; print '</tr><tr>';
}
- print '<TD>';
+ print '<td>';
}
- print '</TD></TR></TABLE>';
+ print '</td></tr></table>';
- print '<TABLE BORDER="0" CELPADDING="3">';
+ print '<table border="0" cellpadding="3">';
foreach $i (grep {/\d/} keys %EZMLM_LABELS) {
- print '<TR><TD>';
+ print '<tr><td>';
if ($opts =~ /$i (?:'(.+?)')/) {
print $q->checkbox(-name=>$i, -value=>$i, -label=>$EZMLM_LABELS{$i}[0], -on=>'1');
} else {
print $q->checkbox(-name=>$i, -value=>$i, -label=>$EZMLM_LABELS{$i}[0]);
}
- print '<IMG SRC="', $HELP_ICON_URL, '" BORDER="0" ALT="', $EZMLM_LABELS{$i}[1] , '">';
- print '</TD><TD>';
+ print help_option($i), '</td><td>';
print $q->textfield(-name=>"$i-value", -value=>$1||$EZMLM_LABELS{$i}[2], -size=>30);
- print '</TD></TR>';
+ print '</td></tr>';
}
- print '</TABLE>';
+ print '</table>';
}
@@ -976,6 +976,7 @@
}
# -------------------------------------------------------------------------
+
sub rmtree {
# A subroutine to recursively delete a directory (like rm -f).
# Based on the one in the perl cookbook :)
@@ -995,6 +996,28 @@
}
# ------------------------------------------------------------------------
+
+sub help_icon($) {
+ # Generate HTML for help icons
+ # Written 20 May 2003 by Andrew Pam <xanni@sericyb.com.au>
+
+ my $msg = $HELPER{$_[0]};
+ return '<img src="' . $HELP_ICON_URL . '" alt="' . $msg .
+ '" onClick="alert(\'' . $msg . '\');">';
+}
+
+# ------------------------------------------------------------------------
+
+sub help_option($) {
+ # Generate HTML for option help icons
+ # Written 20 May 2003 by Andrew Pam <xanni@sericyb.com.au>
+
+ my $msg = $EZMLM_LABELS{$_[0]}[1];
+ return '<img src="' . $HELP_ICON_URL . '" border="0" alt="' . $msg .
+ '" onClick="alert(\'' . $msg . '\');">';
+}
+
+# ------------------------------------------------------------------------
BEGIN {
sub handle_errors {
Hope that helps,
Andrew Pam
--
mailto:xanni@xanadu.net Andrew Pam
http://www.xanadu.com.au/ Chief Scientist, Xanadu
http://www.glasswings.com.au/ Technology Manager, Glass Wings
http://www.sericyb.com.au/ Manager, Serious Cybernetics

View file

@ -0,0 +1,79 @@
From ledjon@ledjon.com Fri Mar 12 00:03:27 2004
Return-Path: <ledjon@ledjon.com>
Delivered-To: guy-ezmlm@rucus.ru.ac.za
Received: (qmail 56152 invoked by uid 1025); 11 Mar 2004 22:03:27 -0000
Received: (qmail-scanner-1.20rc3 56151 invoked by uid 82); 11 Mar 2004 22:03:27 -0000
Received: from 69-56-199-178.theplanet.com (HELO wylde.ledhosting.com) (69.56.199.178)
by server.rucus.ru.ac.za with SMTP; 11 Mar 2004 22:03:24 -0000
Received: (qmail 25788 invoked from network); 11 Mar 2004 17:03:18 -0500
Received: from atlnga1-ar3-4-64-009-109.atlnga1.dsl-verizon.net (HELO page) (4.64.9.109)
by 69-56-199-178.theplanet.com with SMTP; 11 Mar 2004 17:03:18 -0500
From: "Jon Coulter" <ledjon@ledjon.com>
To: <guy-ezmlm@rucus.ru.ac.za>
Subject: Mail::Ezmlm Patch
Date: Thu, 11 Mar 2004 17:03:24 -0500
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_NextPart_000_0000_01C4078A.C44C42F0"
X-Mailer: Microsoft Office Outlook, Build 11.0.5510
Thread-Index: AcQHtKkecjFWE5llQ6aIAIPcXCJAog==
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
X-Qmail-Scanner-Message-ID: <107904260763856141@server.rucus.ru.ac.za>
Status: RO
Content-Length: 1642
This is a multi-part message in MIME format.
------=_NextPart_000_0000_01C4078A.C44C42F0
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit
Your (quite wonderful) Mail::Ezmlm perl module has a bug in that I patched
some time ago for my own use, so I figured I'd go ahead and send it along to
you.
Basically it does something to the effect of 'return @array || undef' which
forces a scalar return (making it return @array as the number of items in
the array, rather then the items themselves)
This just replaces it with a trinary operator.
Feel free to use or ignore it at your own will. Thanks.
Jon Coulter
ledjon@ledjon.com
------=_NextPart_000_0000_01C4078A.C44C42F0
Content-Type: application/octet-stream;
name="Ezmlm.pm.patch"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="Ezmlm.pm.patch"
*** /usr/lib/perl5/site_perl/5.8.0/Mail/Ezmlm.pm~ Wed Jul 16 00:44:01 =
2003=0A=
--- /usr/lib/perl5/site_perl/5.8.0/Mail/Ezmlm.pm Wed Jul 16 00:54:22 2003=0A=
***************=0A=
*** 245,251 ****=0A=
=0A=
if($?) {=0A=
$self->_seterror($?, 'error during ezmlm-list in =
subscribers()'); =0A=
! return @subscribers || undef;=0A=
} else {=0A=
$self->_seterror(undef);=0A=
return @subscribers; =0A=
--- 245,251 ----=0A=
=0A=
if($?) {=0A=
$self->_seterror($?, 'error during ezmlm-list in =
subscribers()'); =0A=
! return (scalar @subscribers ? @subscribers : undef);=0A=
} else {=0A=
$self->_seterror(undef);=0A=
return @subscribers; =0A=
------=_NextPart_000_0000_01C4078A.C44C42F0--

View file

@ -0,0 +1,52 @@
From lbraeuer@mpex.net Fri Mar 5 17:03:07 2004
Return-Path: <lbraeuer@mpex.net>
Delivered-To: guy-ezmlm@rucus.net
Received: (qmail 49433 invoked by uid 1025); 5 Mar 2004 15:03:07 -0000
Received: (qmail-scanner-1.20rc3 49432 invoked by uid 82); 05 Mar 2004 15:03:07 -0000
Received: from endo.mpex.net (80.190.108.11)
by server.rucus.ru.ac.za with SMTP; 5 Mar 2004 15:03:04 -0000
Received: (qmail 21499 invoked by uid 509); 5 Mar 2004 15:02:59 -0000
Received: from unknown (HELO mpex.net) (217.225.11.124)
by 0 with SMTP; 5 Mar 2004 15:02:59 -0000
Message-ID: <404896A9.8030606@mpex.net>
Date: Fri, 05 Mar 2004 16:03:05 +0100
From: Lars Braeuer <lbraeuer@mpex.net>
Organization: MPeX.net GmbH
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040113
X-Accept-Language: de, en-us, en
MIME-Version: 1.0
To: guy-ezmlm@rucus.net
Subject: Bug + fix in ezmlm.pm 0.04
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Status: RO
Content-Length: 1010
Addition: Just found out, that there's the same bug on line 138!
---------------
Hi Guy!
I just posted this on cpan, but I also wanted to let you know:
----------------
http://rt.cpan.org/NoAuth/Bug.html?id=5571
----------------
Subject: Problem with dash in owner or sender address
In Ezmlm.pm 0.04 on line 85 the options are split at every dash ("-\w+"). So when trying to supply
an owner or sender address containing a dash i.e. someone@some-domain.com this domain is splitted in
two parts ("someone@some" and "-domain.com") causing this error: "ezmlm-make: fatal: dir and dot
must start with slash". This occurs because "-domain.com" is interpreted as an option which is of
course wrong.
This problem can be solved by adding a \s right in front of the -\w+ on line 85 of the module:
--- foreach (split(/["'](.+?)["']|(-\w+)/, $commandline)) {
+++ foreach (split(/["'](.+?)["']|(\s-\w+)/, $commandline)) {
This assures, that an option is split and not every occurence of a dash, even in a domain.

View file

@ -0,0 +1,54 @@
From sbeck@gossamer-threads.com Sat Oct 9 00:36:20 2004
Return-Path: <sbeck@gossamer-threads.com>
Delivered-To: guy-ezmlm@rucus.net
Received: (qmail 94672 invoked by uid 1025); 8 Oct 2004 22:36:20 -0000
Received: from sbeck@gossamer-threads.com by server.rucus.ru.ac.za by uid 82 with qmail-scanner-1.22
(clamdscan: 0.75.1. Clear:RC:0(64.69.64.21):.
Processed in 3.991777 secs); 08 Oct 2004 22:36:20 -0000
Received: from gossamer.nmsrv.com (HELO gossamer-threads.com) (64.69.64.21)
by server.rucus.ru.ac.za with SMTP; 8 Oct 2004 22:36:16 -0000
Received: (qmail 17647 invoked from network); 8 Oct 2004 22:36:00 -0000
X-AntiVirus: Clean
Received: from unknown (HELO sbeck) (sbeck@64.180.111.209)
by gossamer.nmsrv.com with (RC4-MD5 encrypted) SMTP; 8 Oct 2004 22:36:00 -0000
Subject: Mail::Ezmlm tainting
From: Scott Beck <sbeck@gossamer-threads.com>
To: Guy Antony Halse <guy-ezmlm@rucus.net>
Content-Type: text/plain
Organization: Gossamer Threads
Message-Id: <1097274969.15328.32.camel@sbeck.office.gossamer-threads.com>
Mime-Version: 1.0
X-Mailer: Ximian Evolution 1.4.6
Date: Fri, 08 Oct 2004 15:36:09 -0700
Content-Transfer-Encoding: 7bit
Status: RO
Content-Length: 810
Hi,
I just ran into a taint problem with Mail::Ezmlm on one of our servers.
In Mail/Ezmlm.pm you have a sub _checkaddress which validates an email
address that is passed off to system, however to just verify the address
is not enough for perl's -T tests. You must reassign it to a capture
from a regex. Here is a version of the function that fixes this (a
little hacky).
sub _checkaddress {
my($self, $address) = @_;
return 1 unless defined($address);
return 0 unless($address =~ /^(\S+\@\S+\.\S+)$/);
$_[1] = $1;
return 1;
}
Cheers,
Scott
--
-------------------- Gossamer Threads Inc. ----------------------
Scott Beck Email: scott@gossamer-threads.com
Lead Software Developer Phone: (604) 687-5804
http://www.gossamer-threads.com Fax: (604) 687-5806

View file

@ -0,0 +1,193 @@
From matt@tnpi.biz Mon Nov 15 21:21:15 2004
Return-Path: <matt@tnpi.biz>
Delivered-To: guy@rucus.ru.ac.za
Received: (qmail 48783 invoked by uid 1025); 15 Nov 2004 19:21:15 -0000
Received: from matt@tnpi.biz by server.rucus.ru.ac.za by uid 82 with qmail-scanner-1.22
(clamdscan: 0.75.1. Clear:RC:0(207.89.154.94):.
Processed in 2.727858 secs); 15 Nov 2004 19:21:15 -0000
Received: from matt-serv2.cdlc.mi.core.com (HELO mail.cadillac.net) (207.89.154.94)
by server.rucus.ru.ac.za with SMTP; 15 Nov 2004 19:21:12 -0000
Received: (qmail 5634 invoked by uid 89); 15 Nov 2004 19:21:06 -0000
Received: from unknown (HELO ?10.0.1.218?) (matt@cadillac.net@10.0.1.218)
by matt-serv2.cdlc.mi.core.com with (RC4-SHA encrypted) SMTP; 15 Nov 2004 19:21:06 -0000
Mime-Version: 1.0 (Apple Message framework v619)
To: guy@rucus.ru.ac.za
Message-Id: <7D5CC579-373B-11D9-A43C-000A95A797A8@tnpi.biz>
Content-Type: multipart/mixed; boundary=Apple-Mail-5--167304881
From: Matt Simerson <matt@tnpi.biz>
Subject: Mail::Ezmlm patch submission
Date: Mon, 15 Nov 2004 14:21:02 -0500
X-Mailer: Apple Mail (2.619)
Status: RO
Content-Length: 6582
--Apple-Mail-5--167304881
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=US-ASCII;
format=flowed
Hey Guy,
First, thanks a bunch for writing Mail::Ezmlm, it's quite useful. :-)
I've used it to write a CGI interface to Ezmlm for a client. It's not a
very complex thing, it just creates a web page where the client logs in
and then has the choice to list the subscribers for a list, batch add a
list of subscribers, or mass delete a list.
It's posted here if you're interested in seeing it:
https://mail.cadillac.net/ezmlm.cgi
You can log in using the domain "example.com" and the password
"guyrucus".
Anyhow, the only problem I've had with Mail::Ezmlm is that when I run
my script suid as the user that owns the mailing list, mod_perl whines
about the data because it's tainted. So, I've made a few minor
alterations to untaint the data. My approach is rather basic and could
be improved upon but it works quite well and is slightly more secure
than what's being used at present. I'd appreciate if you'd review the
patch and apply it or something similar which achieves the same result.
The patch is against v 1.9 of Mail::Ezmlm.
--Apple-Mail-5--167304881
Content-Type: multipart/appledouble;
boundary=Apple-Mail-6--167304881
Content-Disposition: attachment
--Apple-Mail-6--167304881
Content-Transfer-Encoding: base64
Content-Type: application/applefile;
name="Ezmlm.pm.patch"
Content-Disposition: attachment;
filename=Ezmlm.pm.patch
AAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJAAAAPgAAAAoAAAADAAAASAAAAA4AAAACAAAA
VgAABq5URVhUUipjaAAARXptbG0ucG0ucGF0Y2gAAAEAAAAGaAAABWgAAABGAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAASAAJTW9uYWNvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAEAEIACgR0AooAQgAKBHQC
ir2+Z3QAAAFTAAABUwAAAAABAAAABRhSKmNoAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQdDb3VyaWVyAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAACgAAAAQJSGVsdmV0aWNhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADENvbmZpZGVudGlhbAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAQAAAQAAAQAAAIAAAACAAAAAgAAAAIAAAAAAAAABAQABAAEAAAAAAwBQ
AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACW1hY2ludG9zaAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAQAAAAZoAAAFaAAAAEYAZdCMAlUAAAAcAEYAAU1QU1IAAAASQkJT
VAAAAB4D7f//AAAAAAB/K8AAgP//AAAATAB/K9A=
--Apple-Mail-6--167304881
Content-Transfer-Encoding: 7bit
Content-Type: application/text;
x-mac-type=54455854;
x-unix-mode=0644;
x-mac-creator=522A6368;
name="Ezmlm.pm.patch"
Content-Disposition: attachment;
filename=Ezmlm.pm.patch
--- Ezmlm.pm.orig Sat Nov 13 13:38:59 2004
+++ Ezmlm.pm Mon Nov 15 13:44:35 2004
@@ -236,6 +236,16 @@
my($self, $part) = @_;
my(@subscribers);
($self->_seterror(-1, 'must setlist() before returning subscribers()') && return undef) unless(defined($self->{'LIST_NAME'}));
+
+ # additions by matt simerson (matt@tnpi.biz) to pass mod_perl security (taint) checks
+ $ENV{"PATH"} = "";
+ if ( $self->{'LIST_NAME'} =~ /([\w\-\/.]*)/ ) {
+ $self->{'LIST_NAME'} = $1;
+ } else {
+ warn "TAINTED DATA IN LIST_NAME: $self->{'LIST_NAME'}\n";
+ };
+ # end additions
+
if(defined($part) && $part) {
($self->_seterror(-1, "$part part of $self->{'LIST_NAME'} does not appear to exist in subscribers()") && return undef) unless(-e "$self->{'LIST_NAME'}/$part");
@subscribers = map { s/[\r\n]// && $_ } sort `$EZMLM_BASE/ezmlm-list $self->{'LIST_NAME'}/$part`;
@@ -270,6 +280,19 @@
} else {
foreach $address (@addresses) {
next unless $self->_checkaddress($address);
+
+ # matt adds
+ $ENV{"PATH"} = ""; # taint checks
+
+ if ( $self->{'LIST_NAME'} =~ /([\w\-\/.]*)/ ) {
+ $self->{'LIST_NAME'} = $1;
+ } else {
+ warn "TAINTED DATA IN LIST_NAME: $self->{'LIST_NAME'}\n";
+ };
+
+ if ( $address =~ /(.*)/ ) { $address = $1 };
+ # end matt adds
+
system("$EZMLM_BASE/ezmlm-sub", $self->{'LIST_NAME'}, $address) == 0 ||
($self->_seterror($?) && return undef);
}
@@ -322,6 +345,16 @@
} else {
foreach $address (@addresses) {
$ENV{'SENDER'} = $address;
+
+ # matt adds
+ $ENV{"PATH"} = ""; # taint checks
+ if ( $self->{'LIST_NAME'} =~ /([\w\-\/.]*)/ ) {
+ $self->{'LIST_NAME'} = $1;
+ } else {
+ warn "TAINTED DATA IN LIST_NAME: $self->{'LIST_NAME'}\n";
+ };
+ # end matt adds
+
undef($issub) if ((system("$EZMLM_BASE/ezmlm-issubn", $self->{'LIST_NAME'}) / 256) != 0)
}
}
--Apple-Mail-6--167304881--
--Apple-Mail-5--167304881
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=US-ASCII;
format=flowed
Matt
``````````````````````````````````````````````````````````````````
Matt Simerson http://matt.simerson.net
The Network People Inc. http://www.tnpi.biz
The chief danger in life is that you may take too many precautions.
- Alfred Adler
``````````````````````````````````````````````````````````````````
--Apple-Mail-5--167304881--

View file

@ -0,0 +1,67 @@
From xanni@urYod.glasswings.com.au Wed May 26 10:27:04 2004
Return-Path: <xanni@urYod.glasswings.com.au>
Delivered-To: guy-ezmlm@rucus.ru.ac.za
Received: (qmail 95684 invoked by uid 1025); 26 May 2004 08:27:04 -0000
Received: (qmail-scanner-1.22 95683 invoked by uid 82); 26 May 2004 08:27:04 -0000
Received: from mail018.syd.optusnet.com.au (211.29.132.72)
by server.rucus.ru.ac.za with SMTP; 26 May 2004 08:26:58 -0000
Received: from urYod.glasswings.com.au (c211-28-208-136.eburwd1.vic.optusnet.com.au [211.28.208.136])
by mail018.syd.optusnet.com.au (8.11.6p2/8.11.6) with ESMTP id i4Q8QmD27299
for <guy-ezmlm@rucus.ru.ac.za>; Wed, 26 May 2004 18:26:49 +1000
Received: from urYod.glasswings.com.au (localhost.localdomain [127.0.0.1])
by urYod.glasswings.com.au (8.12.10/8.12.10) with ESMTP id i4Q8QlgD004619
for <guy-ezmlm@rucus.ru.ac.za>; Wed, 26 May 2004 18:26:47 +1000
Received: (from xanni@localhost)
by urYod.glasswings.com.au (8.12.10/8.12.10/Submit) id i4Q8Qljs004617
for guy-ezmlm@rucus.ru.ac.za; Wed, 26 May 2004 18:26:47 +1000
Date: Wed, 26 May 2004 18:26:47 +1000
From: Andrew Pam <xanni@glasswings.com.au>
To: guy-ezmlm@rucus.ru.ac.za
Subject: Another ezmlm-web patch
Message-ID: <20040526082647.GN1975@urYod.glasswings.com.au>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.4.1i
X-Face: ="NXL=B\E?60DRs]*]Mp-[@,"/\ESi&5s~&qMPLKzyWqo*<)SiE$IykXoakjYA62"oQT_.0I-i:nay>Pg]I{>J&dN(D<]F}+eaMSI=Kv]<L%q>fr7.e;3u(e1ZlP^C>pRxW*sJEgdAevnn^/D{Eg[f
Status: RO
Content-Length: 1682
Hello! I recently upgraded my system from Red Hat Linux 7.3 to
Fedora Core 1 which in turn resulted in upgrading my perl to 5.8.3.
This revealed a nasty security bug in Mail::Ezmlm which of course affects
ezmlm-web.cgi and is detected by perl when running SUID. Mail::Ezmlm
passes email addresses to the ezmlm tools on the command line using the
"system" perl function, but doesn't check that the email addresses are
free of dangerous characters. Here's a patch to ezmlm-web.cgi to make
it check for valid characters before calling Mail::Ezmlm:
--- ezmlm-web.cgi.orig 2000-09-26 06:58:08.000000000 +1100
+++ ezmlm-web.cgi 2004-05-26 17:54:30.000000000 +1000
@@ -477,7 +477,14 @@
untie %pretty;
}
- if ($list->sub($add->address(), $part) != 1) {
+# Modified 2004-05-26 by Andrew Pam <xanni@sericyb.com.au>
+# Untaint the address because $list->sub will pass it to ezmlm-sub
+# on the command line!
+# Note this may not handle some less common email address formats
+ my($addr) = $add->address() =~ /([\w\.\=]+\@[\w\.\=]+)/
+ or die "Illegal character in address '" . $add->address() ."'";
+# if ($list->sub($add->address(), $part) != 1) {
+ if ($list->sub($addr, $part) != 1) {
die "Unable to subscribe to list: $!";
}
$count++;
Of course arguably Mail::Ezmlm should really be doing this.
Cheers,
Andrew
--
mailto:xanni@xanadu.net Andrew Pam
http://www.xanadu.com.au/ Chief Scientist, Xanadu
http://www.glasswings.com.au/ Technology Manager, Glass Wings
http://www.sericyb.com.au/ Manager, Serious Cybernetics

View file

@ -0,0 +1,67 @@
From gordonr@e-smith.com Wed Oct 24 08:10:56 2001
Return-Path: <gordonr@e-smith.com>
Delivered-To: guy-ezmlm@rucus.ru.ac.za
Received: (qmail 18972 invoked from network); 24 Oct 2001 06:10:56 -0000
Received: from terrapin.ru.ac.za (146.231.128.6)
by rucus.ru.ac.za with SMTP; 24 Oct 2001 06:10:56 -0000
Received: from cpe-144-132-208-16.nsw.bigpond.net.au ([144.132.208.16] helo=icedvovo.sydney.e-smith.com)
by terrapin.ru.ac.za with smtp (Exim 3.32 #1)
id 15wHFE-000C6Z-00
for guy-ezmlm@rucus.ru.ac.za; Wed, 24 Oct 2001 08:10:29 +0200
Received: (qmail 19833 invoked by uid 500); 24 Oct 2001 06:10:53 -0000
MBOX-Line: From gordonr@e-smith.com Wed Oct 24 16:10:53 2001
Date: Wed, 24 Oct 2001 16:10:53 +1000
From: Gordon Rowell <gordonr@e-smith.com>
To: Guy Antony Halse <guy-ezmlm@rucus.ru.ac.za>
Subject: ezmlm-web 2.1 patch - if you can't create lists, you can't delete them
Message-ID: <20011024161053.U8219@e-smith.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.2.5i
Organization: Mitel Networks Corporation
Status: RO
Content-Length: 1758
Lines: 40
Hi Guy,
I'm in process of integrating ezmlm-web with our SME Server V5 product - see
www.e-smith.{com,org}. I did a quick and dirty proof of concept contrib to
integrate ezmlm, and am now revising it around ezmlm-web - great stuff.
It fits in very well with our manager. I have a small shim to create
and delete lists which ensures that the list is known to our account
namespace. I wanted to ensure that people couldn't delete lists without
our manager knowing about it. The patch below also disables list deletion
if you have disabled list creation. You may want another switch, but
overloading opt_c seemed right to me.
BTW: I am also making use of Mail::Ezmlm, which is great, so you're not the
only one who thinks it's a good idea :-)
Also, I'll be building an RPM out of ezmlm-web which I'll make available
once I've done it.
Gordon
--
Gordon Rowell gordonr@e-smith.com
VP Engineering
Network Server Solutions Group http://www.e-smith.com
Mitel Networks Corporation http://www.mitel.com
---CUT HERE------CUT HERE------CUT HERE------CUT HERE---
[gordonr@sao]$ diff -u ezmlm-web.cgi.orig ezmlm-web.cgi
--- ezmlm-web.cgi.orig Tue Sep 26 06:58:08 2000
+++ ezmlm-web.cgi Wed Oct 24 16:05:08 2001
@@ -287,7 +287,7 @@
print $q->submit(-name=>'action', -value=>"[$BUTTON{'create'}]"), ' ' if (!defined($opt_c));
print $q->submit(-name=>'action', -value=>"[$BUTTON{'edit'}]"), ' ' if(defined(@lists));
- print $q->submit(-name=>'action', -value=>"[$BUTTON{'delete'}]") if(defined(@lists));
+ print $q->submit(-name=>'action', -value=>"[$BUTTON{'delete'}]") if ((!defined($opt_c)) && (defined(@lists)));
print '</TD></TR><TR><TD> </TD></TR></TABLE></CENTER>';
print $q->endform;
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,91 @@
$Id: CHANGES,v 1.2 2000/09/25 17:54:06 guy Exp $
REVISION HISTORY - ezmlm-web.cgi
================================
Version 0.1 - 10/04/98 (Not Released)
* University Vac - I was bored and started to play. The first version just
let people play with the subscribers list. No moderators, no nothing.
Version 0.2 - 13/04/98 (Not Released)
* Allow list creation
* Allowed users to edit moderators
Version 0.3 - 15/04/98
* Allow list deletion (for balin@moria.org)
* Made changes to allow it to run on RedHat 4.2 as well as FreeBSD 3.0
* Fixed some minor bugs (cosmetic irritaions really) that people noticed
* Sorted subscribers list into alphabetical order.
* Added command line switch to change list directory (for nxsy@moria.org)
* Wrote some documentation ...
Version 0.4 - 28/04/98
* Fixed up virtual domain (inlocal) stuff as spotted by bryan@rucus
* Allowed the list directory to be automatically created if necessary.
Version 0.5 - 12/05/98 (Not Released)
* More bug fixes. Mainly for mathew@graham.
Version 1.0 - 01/08/98
* Complete re-write to convert to perl5 and CGI.pm
* Removed a lot of dependancy on the OS. Use builtin functions instead :)
* Added support for ezmlm-idx
* Added a lot more command line option support (-adfgiklmnpqsrstux5)
* Added support for digests and digest subscribers
* Added support for blacklists
* Allowed users to edit the config of existing lists
* Allowed the user to edit headeradd and headerremove as well as mimeremove
* Allowed user to edit any of the files in DIR/text
* Revised interface to make it more user-friendly and ergonomic.
* Changed the background colour for Kether (clb@rucus) *gryn*
* Removed a big bug in the delete_list function that had gone unnoticed.
Version 1.0.1 - 10/08/98
* Fixed a bug in the way 1.0 re-configured virtual hosts (bryan@rucus)
* Made the script read the /var/qmail/control files instead of explicitly
setting variables (for david@summersoft)
Version 1.0.2 - 28/08/98
* Fixed the bug introduced in v1.0.1 :( (keith@rucus)
* Fixed the way we recreate config files (noticed by Glen Stewart)
* Made the script check return values of system calls properly
* Fixed some of the taint checking stuff ... reports less in the logs now.
Version 1.0.3 - 03/10/98
* Fixed the alias-alias-alias-list bug in inlocal (bryan@rucus)
* Added a bit of online help
* Fixed the & in list owner (bryan@rucus)
* Added multi-level access to lists (based on idea by Glen Stewart)
Version 2.0 - 01/01/00
* Rewrote most of the code to take advantage of Mail::Ezmlm
* Made the webuser file more functional (users can alter it)
* Now handles all current, and future command line options
* Changed the colours :)
* Added support for ezmlm-cgi web archives
* Made it -w and use strict clean
* Moved all user config to a separate file
* Fixed the way we worked out list config - now complete
* Allowed a user specific config over-ride ``ezmlmwebrc''
* Allowed the printing of `nice' usernames (for Rhodes CS Dept)
* Took account of non-standard paths for moderators
* Removed all system() and `` calls from ezmlm-web.cgi
* Made `look and feel' virtually all user configurable
* Added a lot more context sensitive help
* Made ezmlm-web 99% language configurable - but no other templates yet :(
* Added support for creating databases
Version 2.1 - 25/09/00
* Fixed the multiple delete thing - finally!
* Fixed the '-' in username problem - The '-' in hostnames problem is fixed
in the new version of Mail::Ezmlm
* Fixed the '_' in list names problem
* Added support for file uploads of email addresses (multiple subscribe)
* Made error handling more friendly
Version 2.2 - 26/01/02005
* German translation of the web interface - more translations can be added easily
* changed "ALT"-tags to "TITLE" - most browsers will display the tooltip texts now
* fixed security problems (permissions were not thoroughly check)
* user-based permission for creating lists (can be set in webusersrc)
* the location of the webusers file is now an option in ezmlmwebrc

View file

@ -0,0 +1,89 @@
1. Copy ezmlm-web.cgi to some publically readable directory. It does not
have to be in a path accessible to your web server, but any user with a
mailing list must be able to run it (Check the read and execute rights
on both the file and directory). We put our copy in
/usr/local/bin ...
3. Edit the ezmlmwebrc file and alter the variables at the top to suit
your particular system. In particular, you will probably have to change
the $ENV{'PATH'} variable. Be particularly careful about what you set
as the path. Too much is a security risk and too little will cause the
script to malfunction. Version 2.0 requires that the following programs
be accessible in your path; mv, rm
Also be careful about the $LIST_DIR variable. This script assumes that
all users store their mailing lists in the same sub directory of the
home directory (eg ~/lists). You can override this for an individual
user by recompiling the C wrapper to call ezmlm-web.cgi with a -d
option.
Other configurable options are documented in the ezmlmwebrc file
itself. I have tried to keep the amount of information that you need to
supply to a minimum and also make reasonable guesses about default
values.
finally, copy the ezmlmwebrc file and the "lang" directory to one of
the following places:
- /etc/ezmlm
- the home directory of the user that runs ezmlm-web.cgi
- the directory, that contains your ezmlm-web.cgi file
4. Edit the index.c file and change the path to the path of your copy
of ezmlm-web.cgi. Then compile this file. You can do this by issuing
the command; gcc -o index.cgi index.c
5. For every user/virtual host that needs to manage mailing lists, you
need to create a SUID (user not root!!) copy of index.cgi (see
chmod(1) for details). These need to reside somewhere accessible by
the web server. I suggest that you put them in a sub directory (see
about security) of each user/virtual host's home directory (eg
/home/luser/public_html/ezmlm for Apache on Redhat).
The copies don't actually have to be called index.cgi, but it is nice
for web servers that can resolve a cgi script as an index page (see the
srm.conf file in Apache). It is important to make sure that whichever
directory you choose to put them can i: Execute CGI Scripts and ii: Be
access controlled (here I mean both web and user access) by some method
(eg .htaccess, access.conf for Apache).
6. Install some method of securing access to the page. The following
information is applicable to Apache web servers ... Detailed
information on user authentication can be obtained from the Apache
documentation (http://www.apache.org) and ApacheWeek
(http://www.apacheweek.com/features/userauth)
6.1 Ensure that your Apache setup will allow .htaccess file to control
access in the directory that contains. This is controlled by the
AllowOverride tag in access.conf. (Also ensure you have the
necessary Apache modules installed)
6.2 Create a htpasswd file. This is done using the htpasswd command that
comes with Apache. Its command line syntax is;
htpasswd [-c] passwordfile username
You need to put the passwordfile somewhere that is not accessible by
people through the web, and create an entry for each user you want
to have access ... See the ApacheWeek article for more details.
6.3 Create a .htaccess file in the directory that contains index.cgi.
Note that using Apache's built in access control, you can only control
access to directories, not individual files, hence the need for a
sub-directory in step 5.
The format of the .htaccess file should be along the lines of this;
AuthName EZ Mailing List Manager
AuthType Basic
AuthUserFile /path/to/passwordfile
require valid-user # or require user username
Again, see the ApacheWeek article for details.
7. Test the installation through the web. You should be asked for a
username and password (supplied in 6.2) and then be presented with a
screen entitled EZ Mailing List Manger. You can then try to create and
edit mailing lists ... Have Fun :)
If you have any problems, then you can:
- take a look at https://systemausfall.org/toolforge/ezmlm-web
- send me an email: ezmlm-web@sumpfralle.de

View file

@ -0,0 +1,270 @@
$Id: README,v 1.2 2000/09/25 17:57:21 guy Exp $
=================
| ezmlm-web-2.1 |
=================
If you only want to know how to install ezmlm-web, then you should
read INSTALL.
Contents
========
I. Copyright Stuff
II. Some Background
III. Requirements
IV. Files
V. Notes
VI. Multi-level list access
VII. Language Portability
VIII. Bugs && Bug Reports
XI. Acknowledgements
X. Availability
I. Copyright Stuff - essentially the FreeBSD licence ...
==================
ezmlm-web - version 2.1 - 25/09/2000
Copyright (C) 1998, Guy Antony Halse, All Rights Reserved.
Please send bug reports and comments to guy-ezmlm@rucus.ru.ac.za
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
Neither name Guy Antony Halse nor the names of any contributors may be used
to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
II. Some Background
===================
The need for ezmlm-web arose from the fact that we host many student
societies on our system. These societies usually have a virtual host for web
and email, which is administered by a computer rep from the society. These
computer reps often have little or no knowledge of Unix and so we needed a
user friendly system that would let the create and maintain mailing lists
(such as members@foo.soc.ru.ac.za, committee@foo.soc.ru.ac.za, etc).
Since I am never keen to re-invent the wheel, I had a look at Steve Peterson's
script (http://virtation.com/qmail/ml-sub), which allows people to subscribe
and unsubscribe from mailing lists using a form->email gateway. This is fine
for putting on a web page saying "here come and join our mailing list", but
doesn't really allow you to administrate a list.
Security of mailing lists was a concern, as we really didn't want
unauthorised people to be able to alter some users list. Ezmlm-web itself
implements no security checks (apart from un-tainting input) and so relies
on the web server to do this (re-inventing the wheel again :). We use an
Apache webserver, so one can control access to a directory using a .htaccess
file or in the access.conf file. ApacheWeek have a good article on doing
this at http://www.apacheweek.com/features/userauth. I also give examples
later in this document.
This version of ezmlm-web is based to a large extent on previous
versions that I have developed. It has however been totally re-written to
make use of the Mail::Ezmlm perl module I wrote. At the same time it was
updated and extended to include the new features of ezmlm-idx. It includes
many new features that have been suggested to me over the last few months,
and hopefully is now useful to a much larger group of people.
Since 02005 ezmlm-web is maintained by Lars Kruse (ezmlm-web@sumpfralle.de).
Only minor improvements had to be implemented to keep the already fully
functional ezmlm-web up to date.
III. Requirements
=================
This version of ezmlm-web requires the following;
* qmail v1.03
* ezmlm v0.53 (idx v0.40)
* Perl v5.004 and the following modules;
+ Mail::Ezmlm v0.03
+ Mail::Address v1.15
+ CGI v2.6
+ CGI::Carp v1.06
+ DB_File v1.65
+ Getopt::Std v4.1
+ File::Find v?
+ File::Copy v2.02
The version number indicates the version of the module that ezmlm-web was
developed with. Earlier versions may work, but then they haven't been
tested. Have a look on http://www.CPAN.org/, http://www.qmail.org/, and
http://www.ezmlm.org/ for anything you are missing.
IV. Files
=========
In this distribution you should find 8 files;
README This file. Provides some background information.
Not needed to run ezmlm-web.
INSTALL Notes on installation. Not needed to run ezmlm-web.
CHANGES The change history. Not needed to run ezmlm-web
TODO This file is a list of things I intend doing in future
versions of ezmlm-web. Not needed to run ezmlm-web.
ezmlm-web.cgi The ezmlm-web script proper. This program requires that
you have perl5 installed on your machine and that your web
server is capable of running CGI scripts.
index.c A C wrapper to allow ezmlm-web.cgi to run suid. Not
strictly necessary if your setup allows perl scripts to
run suid, but I prefer using wrappers anyway. It needs to
be edited and compiled to suit your system. Not needed to
run ezmlm-web.
ezmlmwebrc This is the configuration file for ezmlm-web. All options
are explained in this example file. You will need this
file to run ezmlm-web.
htaccess.sample A sample Apache .htaccess file for controlling access to
the mailing lists. If you use another web server, you will
have to work this bit out for yourself.
webusers.sample A sample webusers file for multi-level access control.
The directory "lang" contains the language files. You will need at least the
one, that you have choosen in "ezmlmwebrc" by the option "HTML_LANGUAGE".
V. Notes
=========
* There is a function to delete mailing lists, but I really don't like the
idea. The only reason I put it in is that bvi@rucus asked for it.
If you set $UNSAFE_RD = 0 (the default) in the config section, the
ezmlm-web won't actually delete the list. In this case it moves the <list>
to .<list> and all the associated .qmail files to a sub-directory called
deleted.qmail/ (In the users home directory. This is by far a safer way
(since you can restore lists) and therefore I recommend it.
* The HTML interface has been tested using Nutscrape, Internet Exploder, and
Lynx. If anyone uses anything else and has problems, please let me know.
* I suggest that you make use of custom ezmlmwebrc files rather than using
the -d command line switches - it makes fault diagnosis easier ...
* Please see the section on languages below.
VI. Multi-Level Access
=======================
Ezmlm-web has a multi-level access system. This depends on a file called
webusers being present in $LIST_DIR. If the file is not present, then any
valid user has access to all lists. If, however, this file exists a number
of constraints come into place.
- The webusers file is scanned for either the list name (case insensitive) or
an ALL (case sensitive) entry.
- The list entry (or ALL) is scanned for the current user (as set in
$REMOTE_USER) or an ALL entry.
- If any valid match is made, then the user is allowed to edit the list.
Otherwise the user is politely told to go away ;-)
If list creation is allowed and the webusers file exists, then the person who
creates the list is the default owner. As of yet there is no way to create users
through the web interface, but I intend to do this eventually.
The format of a webusers file is as follows;
list1: user1, user2, user3
ALL: user1, user2
list2: ALL
ie; listname colon (:) and a comma (,) separated list of users. Spaces are
ignored but each list must appear on a new line.
Once this file exists, the ezmlm-web script will allow the list users to
configure their access lists along with any other options.
You can permit some users to create lists by adding a line similar to the
following to your webusers file:
ALLOW_CREATE: user2, user3
If there is no line starting with "ALLOW_CREATE:" in the webusers file, then
no one will be allowed to create lists. This behaviour is new for ezmlm-web
since version 2.2. To stay compatible to old installations, the commandline
option "-c" for ezmlm-web.cgi will still allow everyone to create lists. The
use of this option is deprecated, since the line "ALLOW_CREATE: ALL" provides
the same effect in a cleaner way.
VII. Language Portablity
=========================
One of the great new features of version 2.0 is that it is essentially
language independant (okay, not quite, but is 99% of the way there). Most of
the fixed strings, help, etc is defined in the files of lang directory.
Of course you can change them or create a new translation.
The language can be selected in ezmlmwebrc with the "HTML_LANGUAGE" option.
If anyone gets round to writing full templates for languages I would
appreciate it if you would do two things;
Firstly, make them public and announce them on the ezmlm@lists.cr.yp.to
mailing list so that others may benefit.
Secondly, please mail me a copy (ezmlm-web@sumpfralle.de) so that I may use
them in any future releases of ezmlm-web.
VIII. Bugs && Bug Reports
=======================
I don't know of any bugs, but then this is a rewrite and a first release. It
has been tested reasonably well, but not exhaustively. I know it works on
FreeBSD 4.0-STABLE, FreeBSD 3.4-RELEASE, RedHat 5.1 and Redhat 6.0 all using
an Apache web server, but I would be interested to know whether it works on
other OSs and with other web servers. This version is far less dependent on
the OS than previous versions so I don't see any reason why it shouldn't.
Please mail bug reports and comments to ezmlm-web@sumpfralle.de.
IX. Acknowledgements
===================
* Guy Antony Halse (guy-ezmlm@rucus.ru.ac.za) - He created ezmlm-web,
maintained it till 02005 and wrote nearly every line of code!
* Keith Burdis (keith@rucus.ru.ac.za) - For constantly bugging me and
ensuring that I actually got round to writing some code :)
* Bryan Kilian (bryan@rucus.ru.ac.za) and the administrators of the
Litestep mailing list - For helping beta test and putting up with me
pestering them.
* Several societies at Rhodes. For switching to my web interface and so
unknowingly helping to beta test it.
* Barry Irwin (bvi@moria.org) - For trusting me and moving the Grahamstown
Foundation over to qmail and ezmlm - yet another beta tester :-)
* David Summers (david@summersoft.fay.ar.us) - For some ideas. And for
offering to make up an RPM version. I hope the offer still exists for
version 2.0 :-)
* Glen Stewart (glen_stewart@associate.com) - For a multitude of ideas.
* Fred Lindberg (lindberg@id.wustl.edu) for his useful posts to the
mailing list, suggestions, help, etc
* Galen Johnson (gjohnson@totalsports.net) - For some ideas on bugfixes.
X. Availability
=================
More information on ezmlm-web and developments to ezmlm-web can be found at:
https://systemausfall.org/toolforge/ezmlm-web
The website of Guy Antony Halse (the author of ezmlm-web) is still at:
http://rucus.ru.ac.za/~guy/ezmlm/
The old ftp-archive of ezmlm-web is still available on:
ftp://rucus.ru.ac.za/pub/mail/ezmlm/

View file

@ -0,0 +1,8 @@
$Id: TODO,v 1.3 2000/09/25 19:58:02 guy Exp $
TODO - ezmlm-web 2.1
- More Documentation
- Some nice install method. But then I use FreeBSD and ported it
so that might just count as my nice install method :)
- Option for a css-stylesheet

View file

@ -0,0 +1,39 @@
$Id: UPGRADING,v 1.1 2000/09/25 19:24:20 guy Exp $
UPGRADING ezmlm-web 2.1 to ezmlm-web 2.2
1) Creating of new lists is now controlled by a line in the webusers file instead
of a commandline switch for ezmlm-web.cgi.
necessary changes:
- optional: remove switch "-c" when calling ezmlm-web.cgi (take a look at index.c)
- optional: add a line like "ALLOW_CREATE: john, myra" to the webusers file
2) The location of the webusers file is now defined in ezmlmwebrc. (default: $LIST_DIR/webusers)
necessary changes:
- optional: add a line like "$WEBUSERS_FILE = /home/ml/webusers" to ezmlmwebrc
3) A german translation is available.
- optional: include "lang/de.pm" in ezmlmwebrc (there you can also remove the english definitions)
or copy the new ezmlmwebrc :)
------------------------------------------------------------------------------
UPGRADING ezmlm-web 2.0 to ezmlm-web 2.1
There are no major changes that need to be made in order to upgrade. All
that is necessary is to add two new lines to your ezmlmwebrc ... In the top
section of the file add
$FILE_UPLOAD = 1;
and in the %HELPER section, you need to add
addaddressfile => 'or you may enter the filename of a plain text file containing multiple RFC822 email addresses, one per line',
(or just copy the new ezmlmwebrc :)
Have a look for these two lines in the new ezmlmwebrc included in this
distribution if you are unsure of how/where to put these.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,85 @@
# $Id: ezmlmwebrc,v 1.5 2000/09/25 18:25:26 guy Exp $
# Configuration file for ezmlm-web 2.1
# ===========================================================================
# This file is not just an ordinary configuration file - it contains valid
# perl statements that are executed just like any other perl script. When
# editing this file, be careful that it is still valid perl when you have
# finished (perl -w ezmlmwebrc ;-)
# ---------------------------------------------------------------------------
# Where do we store lists on this server ... Try "$HOME_DIR/lists".
# This directory will automatically be created if needed.
$LIST_DIR = "$HOME_DIR/lists";
# Where is the webusers file for access-permissions
# defaults to "$LIST_DIR/webusers"
$WEBUSERS_FILE = "$LIST_DIR/webusers";
# Safe list deletion?
# 0 = move list to .list and the .qmails to deleted.qmail/. Recoverable :)
# 1 = allow user to delete list completely. No backup, therefore no recovery.
$UNSAFE_RM = 0;
# Who is the alias user on this system (usually alias ;)
$ALIAS_USER = 'alias';
# Where do the qmail control files live on this system ...
$QMAIL_BASE = $Mail::Ezmlm::QMAIL_BASE . '/control';
# The url to our web interface - so we can use ezmlm-cgi if necessary
$EZMLM_CGI_URL = 'http://some.server.that.has/cgi-bin/ezmlm-cgi';
# Where our ezcgirc file lives (probably /etc/ezmlm/ezcgirc)
$EZMLM_CGI_RC = '/etc/ezmlm/ezcgirc';
# Do we want to allow ``pretty'' names - ie more human readable ones
# This will slow ezmlm-web down a bit for large lists
$PRETTY_NAMES = 1;
# Do we want to allow the users to be allowed to upload a file containing
# lists of email addresses to subscribe?
$FILE_UPLOAD = 1;
# What switches to we want ezmlm-web to have on as default. The ezmlm-make
# defaults are aBDFGHIJKLMNOpQRSTUWX (small means enabled, CAPITALS mean
# disabled). The defaults below should be reasonable - I use them ;)
$DEFAULT_OPTIONS = 'aBDFGHiJkLMNOpQRSTUWx';
# Where do we find the nice little help icon - by default HELP_ICON_URL
# points to resources on http://rucus.ru.ac.za/. This will work, but we
# would appreciate it if you changed this to a local site.
$HELP_ICON_URL = 'http://rucus.ru.ac.za/icons/small/unknown.gif';
# Header for every page (.= concatinates)
$HTML_HEADER = '<TABLE BORDER="3" ALIGN="CENTER" CELLPADDING="5"><TR><TD BGCOLOR="#e0e0ff"><FONT SIZE=+3 COLOR=#000080><STRONG>E Z Mailing List Manager</STRONG></FONT></TD></TR></TABLE></CENTER><P>';
$HTML_HEADER .= '<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" ALIGN="CENTER" WIDTH="99%"><TR><TD BGCOLOR="#e0e0ff">';
# Footer for every page (.= concatinates)
$HTML_FOOTER = '</TD></TR></TABLE>';
$HTML_FOOTER .= '<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" ALIGN="CENTER" WIDTH="99%"><TR><TD BGCOLOR="#e0e0ff">';
$HTML_FOOTER .= '<FONT SIZE="-1"><A HREF="http://rucus.ru.ac.za/~guy/ezmlm/#ezmlm-web" TARGET="_blank">ezmlm-web</A> (v2.1) A web interface to <A HREF="http://www.ezmlm.org/" TARGET="_blank">ezmlm</A></FONT></TD></TR></TABLE>';
# What colour do we want the background to be?
$HTML_BGCOLOR = '#000080';
# What colour do we want text?
$HTML_TEXT = '#000000';
# What color do we want links?
$HTML_LINK = '#3333ff';
# What color to we want visited links?
$HTML_VLINK = '#8888ff';
# What is the title of this document?
$HTML_TITLE = 'E Z Mailing List Manager';
# choose a language (en|de)
$HTML_LANGUAGE = 'en';
# ---------------------------------------------------------------------------
# include language-specific definitions
require('./lang/' . $HTML_LANGUAGE . '.pm');

View file

@ -0,0 +1,9 @@
#$Id: htaccess.sample,v 1.1 2000/01/29 11:35:40 guy Exp $
#
#order deny,allow
#deny from all
#allow from .ru.ac.za
AuthName "EZ Mailing List Manager
AuthType Basic
AuthUserFile /etc/ezmlm/.htusers
require valid-user

View file

@ -0,0 +1,25 @@
/* $Id: index.c,v 1.2 2000/09/25 18:14:12 guy Exp $ */
#include <stdio.h>
/* C wrapper to allow ezmlm-web.cgi to run suid */
/* Copyright (C) 1999/2000, Guy Antony Halse, All Rights Reserved */
/* See the README file in this distribution for copyright information */
int main(void) {
/* Change this path to wherever you decided to put ezmlm-web.cgi */
execv("/usr/local/bin/ezmlm-web.cgi");
/* Note that you could also use the following to allow a specific user
to store their mailing lists in a different directory defined by
/tmp/ezmlm-web-demo ... This over-rides the default . */
/* Look at the exec(3) man page if you don't understand how the arguments
list below works */
/*
char *switches[] = { "ezmlm-web.cgi", "-d", "/tmp/ezmlm-web-demo", NULL };
execv("/usr/local/bin/ezmlm-web.cgi", switches);
*/
}

View file

@ -0,0 +1,187 @@
# language-specific definitions for ezmlm-web
# in english
# The meanings of the various ezmlm-make command line switches. The default
# ones match the ezmlm-idx 0.4 default ezmlmrc ... Alter them to suit your
# own ezmlmrc. Removing options from this list makes them unavailable
# through ezmlm-web - this could be useful for things like -w
%EZMLM_LABELS = (
# option => ['Short Name',
# 'Long Help Description'],
a => ['archivieren',
'Ezmlm wird neue Nachrichten zum Archiv hinzufügen'],
b => ['Archiv nur für ModeratorInnen',
'Nur ModeratorInnen haben Zugriff zum Archiv'],
# c => config. This is implicity called, so is not defined here
d => ['Zusammenfassungen',
'Erstelle eine Mailing-Liste, an die regelmäßige Zusammenfassungen versandt werden'],
# e => edit. Also implicity called, so not defined here
f => ['Listenname als Präfix in Betreff einfügen',
'In die versandten Mails wird in der Betreff-Zeile ein Präfix eingefügt'],
g => ['Archiv nur für Mitglieder',
'Nur TeilnehmerInnen der Liste erhalten Zugriff zum Archiv'],
h => ['abonnieren ohne Bestätigung',
'Das Abonnieren der Liste erfordert keine Bestätigung durch die neue AbonnentIn'],
i => ['Web-Index erstellen',
'Den Zugriff auf das Archiv per Webinterface erlauben'],
j => ['abmelden ohne Bestätigung',
'Das Abbestellen der Liste erfordert keine Bestätigung durch die ehemalige AbonnentIn'],
k => ['Beachte Ausschlussliste',
'Einsendungen von Abonnenten, die inm deny-Verzeichnis enthalten sind, werden abgelehnt'],
l => ['Abonnenten-Auflistung für AdministratorInnen',
'Die AdministratorInnen können eine Liste aller AbonnentInnen anfordern'],
m => ['Moderation aktivieren',
'Alle eingehenden Nachrichten müssen durch eine ModeratorIn bestätigt werden'],
n => ['Anpassung der Textbausteine erlauben',
'Administratoren dürfen die Standard-Textbausteine im Unterverzeichnis text/ verändern'],
o => ['Nur ModeratorInnen dürfen einsenden',
'Nur eingehende Nachrichten von den ModeratorInnen werden akzeptiert'],
p => ['Öffentlich',
'Die öffentliche Einschreibung und Archiv-Anforderung ist erlaubt'],
q => ['Verarbeite Anforderungen',
'Mails an liste-request@domain werden verarbeitet'],
r => ['Administration per Mail erlauben',
'Die Verwaltung der Liste durch Mails der AdministratorInnen ist erlaubt'],
s => ['Abonnierung durch ModeratorIn bestätigen',
'Die Einschreibungen in die Liste und die Zusammenfassungs-Liste werden moderiert'],
t => ['Infotext an Mails anhängen',
'An alle ausgehenden Mails wird ein Anhang angefügt'],
u => ['Nur Abonnenten dürfen einsenden',
'Einsendungen von nicht-eingeschriebenen Mail-Adressen werden abgewiesen'],
# v => version. I doubt you will really need this ;-)
w => ['Warnung deaktivieren',
'Entferne den Aufruf von ezmlm-warn aus der Listen-Konfiguration - es wird angenommen, dass ezmlm-warn auf einem anderem Wege gestartet wird'],
x => ['Filtere Anhänge und Kopfzeilen',
'Mails mit den angegebenen Anhangs-Typen werden abgewiesen - die angegebenen Kopfzeilen werden aus den ausgehenden Mails entfernt'],
# y => not used
# z => not used
# These all take an extra argument, which is the default value to use
0 => ['Unterlisten',
'Diese Liste soll eine Unterliste einer anderen Hauptliste sein',
'hauptliste@domain'],
# 1 => not used
# 2 => not used
3 => ['Absender',
'Ersetze den Absender der ausgehenden Mails durch diese Adresse',
'Absender'],
4 => ['Zusammenfassungseinstellungen',
'Einstellungen for ezmlm-tstdig (nach "t" Stunden oder "m" Nachrichten oder "k" Kilobyte',
'-t24 -m30 -k64'],
5 => ['Adresse des Verantwortlichen der Liste',
'Mail-Adresse des Listen-Eigentümers',
'name@domain.org'],
6 => ['SQL-Datenbank',
'SQL-Datenbank-Zugangsinformationen (erfordert SQL-Unterstützung)',
'host:port:user:password:datab:table'],
7 => ['Listen-Moderations-Verzeichnis',
'Falls die Liste moderiert wird, ist der vollständige Verzeichnispfad zur Moderationsdatenbank erforderlich',
'/absoluter/pfad/zur/moderations/datenbank'],
8 => ['Einschreibungs-Moderations-Verzeichnis',
'Falls die Einschreibung in die Liste moderiert wird, ist der vollständige Verzeichnispfad zur Einschreibungs-Moderationsdatenbank erforderlich',
'/absoluter/pfad/zur/abonnenten/moderations/datenbank'],
9 => ['Administrations-Verzeichnis',
'Falls die Liste per Mail administriert wird, ist der vollständige Verzeichnispfad zur Administrationsdatenbank erforderlich',
'/absoluter/pfad/zur/administrations/datenbank'],
);
# This list defines most of the context sensitive help in ezmlm-web. What
# isn't defined here is the options, which are defined above ... You can
# alter these if you feel something else would make more sense to your users
# Just be careful of what can fit on a screen!
%HELPER = (
# These should be self explainitory
addaddress => 'Eine Mail-Adresse - auch in der Form \'Max Meier <max@meier.de>\'',
addaddressfile => 'alternativ ist auch eine Datei mit je einer Adresse pro Zeile möglich',
moderator => 'ModeratorInnen kontrollen, welche Mails weitegeleitet und welche AbonnentInnen akzeptiert werden',
deny => 'Ausschluss: die Mail-Adressen, die NIE an die Liste schreiben dürfen',
allow => 'Zulassung: die Mail-Adressen, die immer an die Liste schreiben dürfen',
digest => 'Zusammenfassung: diese Leute werden regeläßige Zusammenfassungen der Mailingliste erhalten',
webarch => 'Gehe zum Web-Archiv der Mailingliste',
config => 'Einstellungen zur Mailingliste',
listname => 'Dies ist der eindeutige Name der Mailingliste',
listadd => 'Die Adresse der Mailingliste - nur der lokale Teil kann geändert werden',
webusers => 'unfertig: derzeit können Listen-Administratoren nur manuell festgelegt werden',
prefix => 'Präfix der Betreffzeile',
headerremove => 'Diese Kopfzeilen werden aus den ausgehenden Mails entfernt',
headeradd => 'Diese Kopfzeilen werden zu jeder ausgehenden Mail hinzugefügt',
mimeremove => 'Alle Mails, die die genannten Anhangs-Typen beinhalten, werden abgewiesen',
allowedit => 'Komma-getrennte Liste von (existierenden) Nutzern oder <CODE>ALL</CODE>',
mysqlcreate => 'Anlegen der konfigurierten MySQL-Datenbank'
);
# This defines the captions of each of the buttons in ezmlm-web, and allows
# you to configure them for your own language or taste. Since these are used
# by the switching algorithm it is important that every button has a unique
# caption - ie we can't have two 'Edit' buttons doing different things.
%BUTTON = (
# These MUST all be unique!
create => 'Anlegen',
createlist => 'Liste anlegen',
edit => 'Bearbeiten',
delete => 'Entfernen',
deleteaddress => 'Entferne Adresse',
addaddress => 'Füge Adresse hinzu',
moderators => 'ModeratorInnen',
denylist => 'Ausschlussliste',
allowlist => 'Zulassungsliste',
digestsubscribers => 'Abonnenten der Zusammenfassungen',
configuration => 'Konfiguration',
yes => 'Ja',
no => 'Nein',
updateconfiguration => 'Speichere Konfiguration',
edittexts => 'Bearbeite Texte',
editfile => 'Bearbeite Datei',
savefile => 'Speichere Datei',
webarchive => 'Web-Archiv',
selectlist => 'Listenauswahl',
subscribers => 'AbonnentInnen',
cancel => 'Abbruch',
resetform => 'Reset',
);
# This defines the fixed text strings that are used in ezmlm-web. By editing
# these along with the button labels and help texts, you can convert ezmlm-web
# to another language :-) If anyone gets arround to doing complete templates
# for other languages I would appreciate a copy so that I can include it in
# future releases of ezmlm-web.
%LANGUAGE = (
nop => 'Diese Funktionalität ist noch nicht umgesetzt worden',
chooselistinfo => "<UL><LI>Markiere eine Liste in der Auswahlbox oder klicke auf [$BUTTON{'create'}].<LI>Klicke auf den [$BUTTON{'edit'}]-Schalter, falls du die markierte Liste bearbeiten möchtest.<LI>Klicke auf den [$BUTTON{'delete'}]-Schalter, falls du die markierte Liste löschen möchtest.</UL>",
confirmdelete => 'Bestätige die Löschung von ', # list name
subscribersto => 'Abonnenten von', # list name
subscribers => 'Abonnenten',
additionalparts => 'Weitere Listen-Bestandteile',
posting => 'Einsendungen',
subscription => 'Einschreibung',
remoteadmin => 'Entfernte AdministratorIn',
for => 'für', # as in; moderators for blahlist
createnew => 'Lege eine neue Liste an',
listname => 'Name der Liste',
listaddress => 'Adresse der Liste',
listoptions => 'Einstellungen der Liste',
allowedtoedit => 'Nutzer, die diese Liste bearbeiten dürfen',
editconfiguration => 'Einstellungen ändern',
prefix => 'Präfix der Betreff-Zeile ausgehender Nachrichten',
headerremove => 'zu entfernende Kopfzeilen',
headeradd => 'einzufügende Kopfzeilen',
mimeremove => 'abzuweisende Anhangs-Typen',
edittextinfo => "Das Auswahlfeld links enthält die Dateien des <BR>Verzeichnisses DIR/text/. Diese Dateien werden als Antwort auf spezifische Nutzer-Anfragen oder als Teil aller ausgehenden Nachrichten versandt.<P>Um diese Dateien zu verändern, wähle ihren Namen im Auswahlfeld an. Anschlißend klicke auf den [$BUTTON{'editfile'}] Schalter.<P>Betätige [$BUTTON{'cancel'}] um die Veränderung abzubrechen.",
editingfile => 'Bearbeite Datei',
editfileinfo => '<BIG><STRONG>ezmlm-manage</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt;</STRONG></TT> Der Name der Liste<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> Die Anmeldungs-Adresse<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> Die Bestätigungs-Adresse<P><BIG><STRONG>ezmlm-store</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt</STRONG></TT> Der Name der Liste<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> Die Zusage-Adresse<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> Die Ablehungs-Adresse</UL>',
mysqlcreate => 'Lege die MySQL-Datenbank an, falls erforderlich',
);
# === Configuration file ends ===

View file

@ -0,0 +1,187 @@
# language-specific definitions for ezmlm-web
# in english
# The meanings of the various ezmlm-make command line switches. The default
# ones match the ezmlm-idx 0.4 default ezmlmrc ... Alter them to suit your
# own ezmlmrc. Removing options from this list makes them unavailable
# through ezmlm-web - this could be useful for things like -w
%EZMLM_LABELS = (
# option => ['Short Name',
# 'Long Help Description'],
a => ['Archived',
'Ezmlm will archive new messages'],
b => ['Block archive',
'Only moderators are allowed to access the archive'],
# c => config. This is implicity called, so is not defined here
d => ['Digest',
'Set up a digest list to disseminate digest of the list messages'],
# e => edit. Also implicity called, so not defined here
f => ['Prefix',
'Outgoing subject will be prefixed with the list name'],
g => ['Guard Archive',
'Archive access requests from unrecognized SENDERs will be rejected'],
h => ['Help subscription',
'Subscriptions do not require confirmation'],
i => ['Indexed',
'Indexed for WWW archive access'],
j => ['Jump off',
'Unsubscribe does not require confirmation'],
k => ['Kill',
'Posts from addresses in dir/deny/ are rejected'],
l => ['Subscriber List',
'Remote administrators can request a subscriber list'],
m => ['Message Moderation',
'All incoming messages are moderated'],
n => ['Text Editing',
'Allow remote administrators to edit files in dir/text/'],
o => ['Others rejected',
'Posts from addresses other than moderators are rejected'],
p => ['Public',
'List will respond to administrative requests and archive retrieval'],
q => ['Service Request Address',
'Process commands sent in the subject to local-request@host'],
r => ['Remote Admin',
'Enable remote adminstration of the list'],
s => ['Subscription Moderation',
'Subscriptions to the main list and digest will be moderated'],
t => ['Trailer',
'Add a trailer to outgoing messages'],
u => ['User Posts Only',
'Posts from unrecognized SENDER addresses will be rejected'],
# v => version. I doubt you will really need this ;-)
w => ['Remove Warn',
'Remove the ezmlm-warn(1) invocations from the list setup. It is assumed that ezmlm-warn(1) is run by other means'],
x => ['Extra',
'Strip certain mimetypes, etc'],
# y => not used
# z => not used
# These all take an extra argument, which is the default value to use
0 => ['Sublist',
'Make the list a sublist of list mainlist@host',
'mainlist@host'],
# 1 => not used
# 2 => not used
3 => ['From Address',
'Replace the &quot;From:&quot; header of the message with &quot;From: fromarg&quot;',
'fromarg'],
4 => ['Digest Options',
'Switches for ezmlm-tstdig(1)',
'-t24 -m30 -k64'],
5 => ['List Owner',
'The email address of the list owner',
''],
6 => ['SQL Database',
'SQL database connect information. Requires SQL support',
'host:port:user:password:datab:table'],
7 => ['Message Moderation Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path'],
8 => ['Subscription Moderation Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path'],
9 => ['Remote Admin Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path']
);
# This list defines most of the context sensitive help in ezmlm-web. What
# isn't defined here is the options, which are defined above ... You can
# alter these if you feel something else would make more sense to your users
# Just be careful of what can fit on a screen!
%HELPER = (
# These should be self explainitory
addaddress => 'You may enter any RFC822 compliant email address here, including the comment part. For example; J Random User <jru@on.web.za>',
addaddressfile => 'or you may enter the filename of a plain text file containing multiple RFC822 email addresses, one per line',
moderator => 'Moderators: people who control who may subscribe or post to a list',
deny => 'Deny: A list of addresses that are _never_ allowed to mail the list',
allow => 'Allow: A list of address that are allowed to mail the list even if the configuration otherwise restricts it',
digest => 'Digest: People who will recieve a digest of all messages on the list',
webarch => 'View the web based archive of this list',
config => 'This lets you alter the way the list is set up',
listname => 'This is the name of the list as displayed on the Select Lists screen. It is also the name of the subdirectory that contains the list',
listadd => 'This is the email address of the list. Note that the defaults come from your qmail config. You should just update the local part (before the @)',
webusers => 'NB! At this stage, any users specified here must exist. User creation may be added in future versions',
prefix => 'Text to add to the subject line of all outgoing messages',
headerremove => 'This is a list of headers to remove from all outgoing mail',
headeradd => 'This is a list of headers to add to all outging mail',
mimeremove => 'All messages whose Content-Type matches these mime types will be bounced back to sender',
allowedit => 'Comma separated list of usernames, or <CODE>ALL</CODE> (all valid users)',
mysqlcreate => 'This will create the necessary MySQL tables if the list configuration above requires it'
);
# This defines the captions of each of the buttons in ezmlm-web, and allows
# you to configure them for your own language or taste. Since these are used
# by the switching algorithm it is important that every button has a unique
# caption - ie we can't have two 'Edit' buttons doing different things.
%BUTTON = (
# These MUST all be unique!
create => 'Create',
createlist => 'Create List',
edit => 'Edit',
delete => 'Delete',
deleteaddress => 'Delete Address',
addaddress => 'Add Address',
moderators => 'Moderators',
denylist => 'Deny List',
allowlist => 'Allow List',
digestsubscribers => 'Digest Subscribers',
configuration => 'Configuration',
yes => 'Yes',
no => 'No',
updateconfiguration => 'Update Configuration',
edittexts => 'Edit Texts',
editfile => 'Edit File',
savefile => 'Save File',
webarchive => 'Web Archive',
selectlist => 'Select List',
subscribers => 'Subscribers',
cancel => 'Cancel',
resetform => 'Reset Form',
);
# This defines the fixed text strings that are used in ezmlm-web. By editing
# these along with the button labels and help texts, you can convert ezmlm-web
# to another language :-) If anyone gets arround to doing complete templates
# for other languages I would appreciate a copy so that I can include it in
# future releases of ezmlm-web.
%LANGUAGE = (
nop => 'Action not yet implemented',
chooselistinfo => "<UL><LI>Choose a mailing list from the selection box or click on [$BUTTON{'create'}].<LI>Click on the [$BUTTON{'edit'}] button if you want to edit the selected list.<LI>Click on the [$BUTTON{'delete'}] button if you want to delete the selected list.</UL>",
confirmdelete => 'Confirm deletion of', # list name
subscribersto => 'Subscribers to', # list name
subscribers => 'subscribers',
additionalparts => 'Additional list parts',
posting => 'Posting',
subscription => 'Subscription',
remoteadmin => 'Remote Admin',
for => 'for', # as in; moderators for blahlist
createnew => 'Create a New List',
listname => 'List Name',
listaddress => 'List Address',
listoptions => 'List Options',
allowedtoedit => 'Users allowed to edit this list',
editconfiguration => 'Edit the List Configuration',
prefix => 'Subject prefex for outgoing messages',
headerremove => 'Headers to strip from all outgoing mail',
headeradd => 'Headers to add to all outgoing mail',
mimeremove => 'Mime types to strip from all outgoing mail',
edittextinfo => "The box on the left contains a list of files available in the<BR>DIR/text directory. These files are sent out in response to specfic user request, or as part of all outgoing messages<P>To edit a file, select its name from the box. Then click on the [$BUTTON{'editfile'}] button.<P>Press [$BUTTON{'cancel'}] when you have finished editing.",
editingfile => 'Editing File',
editfileinfo => '<BIG><STRONG>ezmlm-manage</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt;</STRONG></TT> The list name<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> The subscription address<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> The address a subscriber must reply to<P><BIG><STRONG>ezmlm-store</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt;</STRONG></TT> The list name<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> The acceptance address<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> The rejection address</UL>',
mysqlcreate => 'Create the MySQL database tables if necessary',
);
# === Configuration file ends ===

View file

@ -0,0 +1,5 @@
comm: guy, arb
users: arb
members: ALL
ALL: root
ALLOW_CREATE: root, guy

View file

@ -0,0 +1,84 @@
$Id: CHANGES,v 1.2 2000/09/25 17:54:06 guy Exp $
REVISION HISTORY - ezmlm-web.cgi
================================
Version 0.1 - 10/04/98 (Not Released)
* University Vac - I was bored and started to play. The first version just
let people play with the subscribers list. No moderators, no nothing.
Version 0.2 - 13/04/98 (Not Released)
* Allow list creation
* Allowed users to edit moderators
Version 0.3 - 15/04/98
* Allow list deletion (for balin@moria.org)
* Made changes to allow it to run on RedHat 4.2 as well as FreeBSD 3.0
* Fixed some minor bugs (cosmetic irritaions really) that people noticed
* Sorted subscribers list into alphabetical order.
* Added command line switch to change list directory (for nxsy@moria.org)
* Wrote some documentation ...
Version 0.4 - 28/04/98
* Fixed up virtual domain (inlocal) stuff as spotted by bryan@rucus
* Allowed the list directory to be automatically created if necessary.
Version 0.5 - 12/05/98 (Not Released)
* More bug fixes. Mainly for mathew@graham.
Version 1.0 - 01/08/98
* Complete re-write to convert to perl5 and CGI.pm
* Removed a lot of dependancy on the OS. Use builtin functions instead :)
* Added support for ezmlm-idx
* Added a lot more command line option support (-adfgiklmnpqsrstux5)
* Added support for digests and digest subscribers
* Added support for blacklists
* Allowed users to edit the config of existing lists
* Allowed the user to edit headeradd and headerremove as well as mimeremove
* Allowed user to edit any of the files in DIR/text
* Revised interface to make it more user-friendly and ergonomic.
* Changed the background colour for Kether (clb@rucus) *gryn*
* Removed a big bug in the delete_list function that had gone unnoticed.
Version 1.0.1 - 10/08/98
* Fixed a bug in the way 1.0 re-configured virtual hosts (bryan@rucus)
* Made the script read the /var/qmail/control files instead of explicitly
setting variables (for david@summersoft)
Version 1.0.2 - 28/08/98
* Fixed the bug introduced in v1.0.1 :( (keith@rucus)
* Fixed the way we recreate config files (noticed by Glen Stewart)
* Made the script check return values of system calls properly
* Fixed some of the taint checking stuff ... reports less in the logs now.
Version 1.0.3 - 03/10/98
* Fixed the alias-alias-alias-list bug in inlocal (bryan@rucus)
* Added a bit of online help
* Fixed the & in list owner (bryan@rucus)
* Added multi-level access to lists (based on idea by Glen Stewart)
Version 2.0 - 01/01/00
* Rewrote most of the code to take advantage of Mail::Ezmlm
* Made the webuser file more functional (users can alter it)
* Now handles all current, and future command line options
* Changed the colours :)
* Added support for ezmlm-cgi web archives
* Made it -w and use strict clean
* Moved all user config to a separate file
* Fixed the way we worked out list config - now complete
* Allowed a user specific config over-ride ``ezmlmwebrc''
* Allowed the printing of `nice' usernames (for Rhodes CS Dept)
* Took account of non-standard paths for moderators
* Removed all system() and `` calls from ezmlm-web.cgi
* Made `look and feel' virtually all user configurable
* Added a lot more context sensitive help
* Made ezmlm-web 99% language configurable - but no other templates yet :(
* Added support for creating databases
Version 2.1 - 25/09/00
* Fixed the multiple delete thing - finally!
* Fixed the '-' in username problem - The '-' in hostnames problem is fixed
in the new version of Mail::Ezmlm
* Fixed the '_' in list names problem
* Added support for file uploads of email addresses (multiple subscribe)
* Made error handling more friendly

View file

@ -0,0 +1,323 @@
$Id: README,v 1.2 2000/09/25 17:57:21 guy Exp $
=================
| ezmlm-web-2.1 |
=================
Contents
========
I. Copyright Stuff
II. Some Background
III. Requirements
IV. Files
V. Installation
VI. Notes
VII. Multi-level list access
VIII. Language Portability
IX. Bugs && Bug Reports
X. Acknowledgements
XI. Availability
I. Copyright Stuff - essentially the FreeBSD licence ...
==================
ezmlm-web - version 2.1 - 25/09/2000
Copyright (C) 1998, Guy Antony Halse, All Rights Reserved.
Please send bug reports and comments to guy-ezmlm@rucus.ru.ac.za
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
Neither name Guy Antony Halse nor the names of any contributors may be used
to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
II. Some Background
===================
The need for ezmlm-web arose from the fact that we host many student
societies on our system. These societies usually have a virtual host for web
and email, which is administered by a computer rep from the society. These
computer reps often have little or no knowledge of Unix and so we needed a
user friendly system that would let the create and maintain mailing lists
(such as members@foo.soc.ru.ac.za, committee@foo.soc.ru.ac.za, etc).
Since I am never keen to re-invent the wheel, I had a look at Steve Peterson's
script (http://virtation.com/qmail/ml-sub), which allows people to subscribe
and unsubscribe from mailing lists using a form->email gateway. This is fine
for putting on a web page saying "here come and join our mailing list", but
doesn't really allow you to administrate a list.
Security of mailing lists was a concern, as we really didn't want
unauthorised people to be able to alter some users list. Ezmlm-web itself
implements no security checks (apart from un-tainting input) and so relies
on the web server to do this (re-inventing the wheel again :). We use an
Apache webserver, so one can control access to a directory using a .htaccess
file or in the access.conf file. ApacheWeek have a good article on doing
this at http://www.apacheweek.com/features/userauth. I also give examples
later in this document.
This version of ezmlm-web (2.0) is based to a large extent on previous
versions that I have developed. It has however been totally re-written to
make use of the Mail::Ezmlm perl module I wrote. At the same time it was
updated and extended to include the new features of ezmlm-idx. It includes
many new features that have been suggested to me over the last few months,
and hopefully is now useful to a much larger group of people.
III. Requirements
=================
This version of ezmlm-web requires the following;
* qmail v1.03
* ezmlm v0.53 (idx v0.40)
* Perl v5.004 and the following modules;
+ Mail::Ezmlm v0.03
+ Mail::Address v1.15
+ CGI v2.6
+ CGI::Carp v1.06
+ DB_File v1.65
+ Getopt::Std v4.1
+ File::Find v?
+ File::Copy v2.02
The version number indicates the version of the module that ezmlm-web was
developed with. Earlier versions may work, but then they haven't been
tested. Have a look on http://www.CPAN.org/, http://www.qmail.org/, and
http://www.ezmlm.org/ for anything you are missing.
IV. Files
=========
In this distribution you should find 8 files;
README This file. Provides some background information, notes on
installation, etc. Not needed to run ezmlm-web.
CHANGES The change history. Not needed to run ezmlm-web
TODO This file is a list of things I intend doing in future
versions of ezmlm-web. That is if there are any future
versions :) Not needed to run ezmlm-web.
ezmlm-web.cgi The ezmlm-web script proper. This program requires that
you have perl5 installed on your machine and that your web
server is capable of running CGI scripts.
index.c A C wrapper to allow ezmlm-web.cgi to run suid. Not
strictly necessary if your setup allows perl scripts to
run suid, but I prefer using wrappers anyway. It needs to
be edited and compiled to suit your system. Not needed to
run ezmlm-web.
htaccess.sample A sample Apache .htaccess file for controlling access to
the mailing lists. If you use another web server, you will
have to work this bit out for yourself.
webusers.sample A sample webusers file for multi-level access control.
V. Installation
===============
1. Copy ezmlm-web.cgi to some publically readable directory. It does not
have to be in a path accessible to your web server, but any user with a
mailing list must be able to run it (Check the read and execute rights
on both the file and directory). We put our copy in
/usr/local/bin ...
3. Edit the ezmlmwebrc file and alter the variables at the top to suit
your particular system. In particular, you will probably have to change
the $ENV{'PATH'} variable. Be particularly careful about what you set
as the path. Too much is a security risk and too little will cause the
script to malfunction. Version 2.0 requires that the following programs
be accessible in your path; mv, rm
Also be careful about the $LIST_DIR variable. This script assumes that
all users store their mailing lists in the same sub directory of the
home directory (eg ~/lists). You can override this for an individual
user by recompiling the C wrapper to call ezmlm-web.cgi with a -d
option.
Other configurable options are documented in the ezmlmwebrc file
itself. I have tried to keep the amount of information that you need to
supply to a minimum and also make reasonable guesses about default
values.
4. Edit the index.c file and change the path to the path of your copy
of ezmlm-web.cgi. Then compile this file. You can do this by issuing
the command; gcc -o index.cgi index.c
5. For every user/virtual host that needs to manage mailing lists, you
need to create a SUID (user not root!!) copy of index.cgi (see
chmod(1) for details). These need to reside somewhere accessible by
the web server. I suggest that you put them in a sub directory (see
about security) of each user/virtual host's home directory (eg
/home/luser/public_html/ezmlm for Apache on Redhat).
The copies don't actually have to be called index.cgi, but it is nice
for web servers that can resolve a cgi script as an index page (see the
srm.conf file in Apache). It is important to make sure that whichever
directory you choose to put them can i: Execute CGI Scripts and ii: Be
access controlled (here I mean both web and user access) by some method
(eg .htaccess, access.conf for Apache).
6. Install some method of securing access to the page. The following
information is applicable to Apache web servers ... Detailed
information on user authentication can be obtained from the Apache
documentation (http://www.apache.org) and ApacheWeek
(http://www.apacheweek.com/features/userauth)
6.1 Ensure that your Apache setup will allow .htaccess file to control
access in the directory that contains. This is controlled by the
AllowOverride tag in access.conf. (Also ensure you have the
necessary Apache modules installed)
6.2 Create a htpasswd file. This is done using the htpasswd command that
comes with Apache. Its command line syntax is;
htpasswd [-c] passwordfile username
You need to put the passwordfile somewhere that is not accessible by
people through the web, and create an entry for each user you want
to have access ... See the ApacheWeek article for more details.
6.3 Create a .htaccess file in the directory that contains index.cgi.
Note that using Apache's built in access control, you can only control
access to directories, not individual files, hence the need for a
sub-directory in step 5.
The format of the .htaccess file should be along the lines of this;
AuthName EZ Mailing List Manager
AuthType Basic
AuthUserFile /path/to/passwordfile
require valid-user # or require user username
Again, see the ApacheWeek article for details.
7. Test the installation through the web. You should be asked for a
username and password (supplied in 6.2) and then be presented with a
screen entitled EZ Mailing List Manger. You can then try to create and
edit mailing lists ... Have Fun :)
VI. Notes
=========
* There is a function to delete mailing lists, but I really don't like the
idea. The only reason I put it in is that bvi@rucus asked for it.
If you set $UNSAFE_RD = 0 (the default) in the config section, the
ezmlm-web won't actually delete the list. In this case it moves the <list>
to .<list> and all the associated .qmail files to a sub-directory called
deleted.qmail/ (In the users home directory. This is by far a safer way
(since you can restore lists) and therefore I recommend it.
* The HTML interface has been tested using Nutscrape, Internet Exploder, and
Lynx. If anyone uses anything else and has problems, please let me know.
* I suggest that you make use of custom ezmlmwebrc files rather than using
the -d command line switches - it makes fault diagnosis easier ...
* Please see the section on languages below.
VII. Multi-Level Access
=======================
Ezmlm-web has a multi-level access system. This depends on a file called
webusers being present in $LIST_DIR. If the file is not present, then any
valid user has access to all lists. If, however, this file exists a number
of constraints come into place.
- The webusers file is scanned for either the list name (case insensitive) or
an ALL (case sensitive) entry.
- The list entry (or ALL) is scanned for the current user (as set in
$REMOTE_USER) or an ALL entry.
- If any valid match is made, then the user is allowed to edit the list.
Otherwise the user is politely told to go away ;-)
If list creation is allowed and the webusers file exists, then the person who
creates the list is the default owner. As of yet there is no way to add users
through the web interface, but I intend to do this eventually.
The format of a webusers file is as follows;
list1: user1, user2, user3
ALL: user1, user2
list2: ALL
ie; listname colon (:) and a comma (,) separated list of users. Spaces are
ignored but each list must appear on a new line.
Once this file exists, the ezmlm-web script will allow the list users to
configure their access lists along with any other options.
Oh, and BTW, list creation through the web can now be disabled. The way to do
this is to compile the wrapper calling ezmlm-web.cgi with a -c switch. See the
example index.c file for more details.
VIII. Language Portablity
=========================
One of the great new features of version 2.0 is that it is essentially
language independant (okay, not quite, but is 99% of the way there). Most of
the fixed strings, help, etc is defined in the RC file and thus can be
altered to suite a particular locale, language or even your own taste.
If anyone gets round to writing full templates for languages I would
appreciate it if you would do two things;
Firstly, make them public and announce them on the ezmlm@lists.cr.yp.to
mailing list so that others may benefit.
Secondly, please mail me a copy (guy-ezmlm@rucus.ru.ac.za) so that I may use
them in any future releases of ezmlm-web.
IX. Bugs && Bug Reports
=======================
I don't know of any bugs, but then this is a rewrite and a first release. It
has been tested reasonably well, but not exhaustively. I know it works on
FreeBSD 4.0-STABLE, FreeBSD 3.4-RELEASE, RedHat 5.1 and Redhat 6.0 all using
an Apache web server, but I would be interested to know whether it works on
other OSs and with other web servers. This version is far less dependent on
the OS than previous versions so I don't see any reason why it shouldn't.
Please mail bug reports and comments to guy-ezmlm@rucus.ru.ac.za
X. Acknowledgements
===================
* Keith Burdis (keith@rucus.ru.ac.za) - For constantly bugging me and
ensuring that I actually got round to writing some code :)
* Bryan Kilian (bryan@rucus.ru.ac.za) and the administrators of the
Litestep mailing list - For helping beta test and putting up with me
pestering them.
* Several societies at Rhodes. For switching to my web interface and so
unknowingly helping to beta test it.
* Barry Irwin (bvi@moria.org) - For trusting me and moving the Grahamstown
Foundation over to qmail and ezmlm - yet another beta tester :-)
* David Summers (david@summersoft.fay.ar.us) - For some ideas. And for
offering to make up an RPM version. I hope the offer still exists for
version 2.0 :-)
* Glen Stewart (glen_stewart@associate.com) - For a multitude of ideas.
* Fred Lindberg (lindberg@id.wustl.edu) for his useful posts to the
mailing list, suggestions, help, etc
* Galen Johnson (gjohnson@totalsports.net) - For some ideas on bugfixes.
XI. Availability
=================
The latest version of ezmlm-web will always be available on;
ftp://rucus.ru.ac.za/pub/mail/ezmlm/
More information on ezmlm-web and developments to ezmlm-web can be found at;
http://rucus.ru.ac.za/~guy/ezmlm/

View file

@ -0,0 +1,8 @@
$Id: TODO,v 1.3 2000/09/25 19:58:02 guy Exp $
TODO - ezmlm-web 2.1
- More Documentation
- Maybe allowing user specific overides on the -c option.
- Some nice install method. But then I use FreeBSD and ported it
so that might just count as my nice install method :)

View file

@ -0,0 +1,18 @@
$Id: UPGRADING,v 1.1 2000/09/25 19:24:20 guy Exp $
UPGRADING ezmlm-web 2.0 to ezmlm-web 2.1
There are no major changes that need to be made in order to upgrade. All
that is necessary is to add two new lines to your ezmlmwebrc ... In the top
section of the file add
$FILE_UPLOAD = 1;
and in the %HELPER section, you need to add
addaddressfile => 'or you may enter the filename of a plain text file containing multiple RFC822 email addresses, one per line',
(or just copy the new ezmlmwebrc :)
Have a look for these two lines in the new ezmlmwebrc included in this
distribution if you are unsure of how/where to put these.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,268 @@
# $Id: ezmlmwebrc,v 1.5 2000/09/25 18:25:26 guy Exp $
# Configuration file for ezmlm-web 2.1
# ===========================================================================
# This file is not just an ordinary configuration file - it contains valid
# perl statements that are executed just like any other perl script. When
# editing this file, be careful that it is still valid perl when you have
# finished (perl -w ezmlmwebrc ;-)
# It is divided into to logical parts. The first part configures the way
# ezmlm-web runs, and the second changes the language, etc of ezmlm-web. You
# can not arbitarilly exclude any statement, since the script doesn't define
# any defaults of its own. You could, however, always split this file up and
# include the parts with
#
# require('/path/to/other/part');
# ---------------------------------------------------------------------------
# Where do we store lists on this server ... Try "$HOME_DIR/lists".
# This directory will automatically be created if needed.
$LIST_DIR = "$HOME_DIR/lists";
# Safe list deletion?
# 0 = move list to .list and the .qmails to deleted.qmail/. Recoverable :)
# 1 = allow user to delete list completely. No backup, therefore no recovery.
$UNSAFE_RM = 0;
# Who is the alias user on this system (usually alias ;)
$ALIAS_USER = 'alias';
# Where do the qmail control files live on this system ...
$QMAIL_BASE = $Mail::Ezmlm::QMAIL_BASE . '/control';
# The url to our web interface - so we can use ezmlm-cgi if necessary
$EZMLM_CGI_URL = 'http://some.server.that.has/cgi-bin/ezmlm-cgi';
# Where our ezcgirc file lives (probably /etc/ezmlm/ezcgirc)
$EZMLM_CGI_RC = '/etc/ezmlm/ezcgirc';
# Do we want to allow ``pretty'' names - ie more human readable ones
# This will slow ezmlm-web down a bit for large lists
$PRETTY_NAMES = 1;
# Do we want to allow the users to be allowed to upload a file containing
# lists of email addresses to subscribe?
$FILE_UPLOAD = 1;
# What switches to we want ezmlm-web to have on as default. The ezmlm-make
# defaults are aBDFGHIJKLMNOpQRSTUWX (small means enabled, CAPITALS mean
# disabled). The defaults below should be reasonable - I use them ;)
$DEFAULT_OPTIONS = 'aBDFGHiJkLMNOpQRSTUWx';
# Where do we find the nice little help icon - by default HELP_ICON_URL
# points to resources on http://rucus.ru.ac.za/. This will work, but we
# would appreciate it if you changed this to a local site.
$HELP_ICON_URL = 'http://rucus.ru.ac.za/icons/small/unknown.gif';
# Header for every page (.= concatinates)
$HTML_HEADER = '<TABLE BORDER="3" ALIGN="CENTER" CELLPADDING="5"><TR><TD BGCOLOR="#e0e0ff"><FONT SIZE=+3 COLOR=#000080><STRONG>E Z Mailing List Manager</STRONG></FONT></TD></TR></TABLE></CENTER><P>';
$HTML_HEADER .= '<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" ALIGN="CENTER" WIDTH="99%"><TR><TD BGCOLOR="#e0e0ff">';
# Footer for every page (.= concatinates)
$HTML_FOOTER = '</TD></TR></TABLE>';
$HTML_FOOTER .= '<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" ALIGN="CENTER" WIDTH="99%"><TR><TD BGCOLOR="#e0e0ff">';
$HTML_FOOTER .= '<FONT SIZE="-1"><A HREF="http://rucus.ru.ac.za/~guy/ezmlm/#ezmlm-web" TARGET="_blank">ezmlm-web</A> (v2.1) A web interface to <A HREF="http://www.ezmlm.org/" TARGET="_blank">ezmlm</A></FONT></TD></TR></TABLE>';
# What colour do we want the background to be?
$HTML_BGCOLOR = '#000080';
# What colour do we want text?
$HTML_TEXT = '#000000';
# What color do we want links?
$HTML_LINK = '#3333ff';
# What color to we want visited links?
$HTML_VLINK = '#8888ff';
# What is the title of this document?
$HTML_TITLE = 'E Z Mailing List Manager';
# ---------------------------------------------------------------------------
# The meanings of the various ezmlm-make command line switches. The default
# ones match the ezmlm-idx 0.4 default ezmlmrc ... Alter them to suit your
# own ezmlmrc. Removing options from this list makes them unavailable
# through ezmlm-web - this could be useful for things like -w
%EZMLM_LABELS = (
# option => ['Short Name',
# 'Long Help Description'],
a => ['Archived',
'Ezmlm will archive new messages'],
b => ['Block archive',
'Only moderators are allowed to access the archive'],
# c => config. This is implicity called, so is not defined here
d => ['Digest',
'Set up a digest list to disseminate digest of the list messages'],
# e => edit. Also implicity called, so not defined here
f => ['Prefix',
'Outgoing subject will be prefixed with the list name'],
g => ['Guard Archive',
'Archive access requests from unrecognized SENDERs will be rejected'],
h => ['Help subscription',
'Subscriptions do not require confirmation'],
i => ['Indexed',
'Indexed for WWW archive access'],
j => ['Jump off',
'Unsubscribe does not require confirmation'],
k => ['Kill',
'Posts from addresses in dir/deny/ are rejected'],
l => ['Subscriber List',
'Remote administrators can request a subscriber list'],
m => ['Message Moderation',
'All incoming messages are moderated'],
n => ['Text Editing',
'Allow remote administrators to edit files in dir/text/'],
o => ['Others rejected',
'Posts from addresses other than moderators are rejected'],
p => ['Public',
'List will respond to administrative requests and archive retrieval'],
q => ['Service Request Address',
'Process commands sent in the subject to local-request@host'],
r => ['Remote Admin',
'Enable remote adminstration of the list'],
s => ['Subscription Moderation',
'Subscriptions to the main list and digest will be moderated'],
t => ['Trailer',
'Add a trailer to outgoing messages'],
u => ['User Posts Only',
'Posts from unrecognized SENDER addresses will be rejected'],
# v => version. I doubt you will really need this ;-)
w => ['Remove Warn',
'Remove the ezmlm-warn(1) invocations from the list setup. It is assumed that ezmlm-warn(1) is run by other means'],
x => ['Extra',
'Strip certain mimetypes, etc'],
# y => not used
# z => not used
# These all take an extra argument, which is the default value to use
0 => ['Sublist',
'Make the list a sublist of list mainlist@host',
'mainlist@host'],
# 1 => not used
# 2 => not used
3 => ['From Address',
'Replace the &quot;From:&quot; header of the message with &quot;From: fromarg&quot;',
'fromarg'],
4 => ['Digest Options',
'Switches for ezmlm-tstdig(1)',
'-t24 -m30 -k64'],
5 => ['List Owner',
'The email address of the list owner',
''],
6 => ['SQL Database',
'SQL database connect information. Requires SQL support',
'host:port:user:password:datab:table'],
7 => ['Message Moderation Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path'],
8 => ['Subscription Moderation Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path'],
9 => ['Remote Admin Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path']
);
# This list defines most of the context sensitive help in ezmlm-web. What
# isn't defined here is the options, which are defined above ... You can
# alter these if you feel something else would make more sense to your users
# Just be careful of what can fit on a screen!
%HELPER = (
# These should be self explainitory
addaddress => 'You may enter any RFC822 compliant email address here, including the comment part. For example; J Random User <jru@on.web.za>',
addaddressfile => 'or you may enter the filename of a plain text file containing multiple RFC822 email addresses, one per line',
moderator => 'Moderators: people who control who may subscribe or post to a list',
deny => 'Deny: A list of addresses that are _never_ allowed to mail the list',
allow => 'Allow: A list of address that are allowed to mail the list even if the configuration otherwise restricts it',
digest => 'Digest: People who will recieve a digest of all messages on the list',
webarch => 'View the web based archive of this list',
config => 'This lets you alter the way the list is set up',
listname => 'This is the name of the list as displayed on the Select Lists screen. It is also the name of the subdirectory that contains the list',
listadd => 'This is the email address of the list. Note that the defaults come from your qmail config. You should just update the local part (before the @)',
webusers => 'NB! At this stage, any users specified here must exist. User creation may be added in future versions',
prefix => 'Text to add to the subject line of all outgoing messages',
headerremove => 'This is a list of headers to remove from all outgoing mail',
headeradd => 'This is a list of headers to add to all outging mail',
mimeremove => 'All messages whose Content-Type matches these mime types will be bounced back to sender',
allowedit => 'Comma separated list of usernames, or <CODE>ALL</CODE> (all valid users)',
mysqlcreate => 'This will create the necessary MySQL tables if the list configuration above requires it'
);
# This defines the captions of each of the buttons in ezmlm-web, and allows
# you to configure them for your own language or taste. Since these are used
# by the switching algorithm it is important that every button has a unique
# caption - ie we can't have two 'Edit' buttons doing different things.
%BUTTON = (
# These MUST all be unique!
create => 'Create',
createlist => 'Create List',
edit => 'Edit',
delete => 'Delete',
deleteaddress => 'Delete Address',
addaddress => 'Add Address',
moderators => 'Moderators',
denylist => 'Deny List',
allowlist => 'Allow List',
digestsubscribers => 'Digest Subscribers',
configuration => 'Configuration',
yes => 'Yes',
no => 'No',
updateconfiguration => 'Update Configuration',
edittexts => 'Edit Texts',
editfile => 'Edit File',
savefile => 'Save File',
webarchive => 'Web Archive',
selectlist => 'Select List',
subscribers => 'Subscribers',
cancel => 'Cancel',
resetform => 'Reset Form',
);
# This defines the fixed text strings that are used in ezmlm-web. By editing
# these along with the button labels and help texts, you can convert ezmlm-web
# to another language :-) If anyone gets arround to doing complete templates
# for other languages I would appreciate a copy so that I can include it in
# future releases of ezmlm-web.
%LANGUAGE = (
nop => 'Action not yet implemented',
chooselistinfo => "<UL><LI>Choose a mailing list from the selection box or click on [$BUTTON{'create'}].<LI>Click on the [$BUTTON{'edit'}] button if you want to edit the selected list.<LI>Click on the [$BUTTON{'delete'}] button if you want to delete the selected list.</UL>",
confirmdelete => 'Confirm deletion of', # list name
subscribersto => 'Subscribers to', # list name
subscribers => 'subscribers',
additionalparts => 'Additional list parts',
posting => 'Posting',
subscription => 'Subscription',
remoteadmin => 'Remote Admin',
for => 'for', # as in; moderators for blahlist
createnew => 'Create a New List',
listname => 'List Name',
listaddress => 'List Address',
listoptions => 'List Options',
allowedtoedit => 'Users allowed to edit this list',
editconfiguration => 'Edit the List Configuration',
prefix => 'Subject prefex for outgoing messages',
headerremove => 'Headers to strip from all outgoing mail',
headeradd => 'Headers to add to all outgoing mail',
mimeremove => 'Mime types to strip from all outgoing mail',
edittextinfo => "The box on the left contains a list of files available in the<BR>DIR/text directory. These files are sent out in response to specfic user request, or as part of all outgoing messages<P>To edit a file, select its name from the box. Then click on the [$BUTTON{'editfile'}] button.<P>Press [$BUTTON{'cancel'}] when you have finished editing.",
editingfile => 'Editing File',
editfileinfo => '<BIG><STRONG>ezmlm-manage</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt;</STRONG></TT> The list name<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> The subscription address<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> The address a subscriber must reply to<P><BIG><STRONG>ezmlm-store</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt;</STRONG></TT> The list name<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> The acceptance address<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> The rejection address</UL>',
mysqlcreate => 'Create the MySQL database tables if necessary',
);
# === Configuration file ends ===

View file

@ -0,0 +1,9 @@
#$Id: htaccess.sample,v 1.1 2000/01/29 11:35:40 guy Exp $
#
#order deny,allow
#deny from all
#allow from .ru.ac.za
AuthName "EZ Mailing List Manager
AuthType Basic
AuthUserFile /etc/ezmlm/.htusers
require valid-user

View file

@ -0,0 +1,25 @@
/* $Id: index.c,v 1.2 2000/09/25 18:14:12 guy Exp $ */
#include <stdio.h>
/* C wrapper to allow ezmlm-web.cgi to run suid */
/* Copyright (C) 1999/2000, Guy Antony Halse, All Rights Reserved */
/* See the README file in this distribution for copyright information */
int main(void) {
/* Change this path to wherever you decided to put ezmlm-web.cgi */
execv("/usr/local/bin/ezmlm-web.cgi");
/* Note that you could also use the following to allow a specific user
to store their mailing lists in a different directory defined by
/tmp/ezmlm-web-demo ... This over-rides the default . */
/* Look at the exec(3) man page if you don't understand how the arguments
list below works */
/*
char *switches[] = { "ezmlm-web.cgi", "-d", "/tmp/ezmlm-web-demo", NULL };
execv("/usr/local/bin/ezmlm-web.cgi", switches);
*/
}

View file

@ -0,0 +1,4 @@
comm: guy, arb
users: arb
members: ALL
ALL: root

View file

@ -0,0 +1,84 @@
$Id: CHANGES,v 1.2 2000/09/25 17:54:06 guy Exp $
REVISION HISTORY - ezmlm-web.cgi
================================
Version 0.1 - 10/04/98 (Not Released)
* University Vac - I was bored and started to play. The first version just
let people play with the subscribers list. No moderators, no nothing.
Version 0.2 - 13/04/98 (Not Released)
* Allow list creation
* Allowed users to edit moderators
Version 0.3 - 15/04/98
* Allow list deletion (for balin@moria.org)
* Made changes to allow it to run on RedHat 4.2 as well as FreeBSD 3.0
* Fixed some minor bugs (cosmetic irritaions really) that people noticed
* Sorted subscribers list into alphabetical order.
* Added command line switch to change list directory (for nxsy@moria.org)
* Wrote some documentation ...
Version 0.4 - 28/04/98
* Fixed up virtual domain (inlocal) stuff as spotted by bryan@rucus
* Allowed the list directory to be automatically created if necessary.
Version 0.5 - 12/05/98 (Not Released)
* More bug fixes. Mainly for mathew@graham.
Version 1.0 - 01/08/98
* Complete re-write to convert to perl5 and CGI.pm
* Removed a lot of dependancy on the OS. Use builtin functions instead :)
* Added support for ezmlm-idx
* Added a lot more command line option support (-adfgiklmnpqsrstux5)
* Added support for digests and digest subscribers
* Added support for blacklists
* Allowed users to edit the config of existing lists
* Allowed the user to edit headeradd and headerremove as well as mimeremove
* Allowed user to edit any of the files in DIR/text
* Revised interface to make it more user-friendly and ergonomic.
* Changed the background colour for Kether (clb@rucus) *gryn*
* Removed a big bug in the delete_list function that had gone unnoticed.
Version 1.0.1 - 10/08/98
* Fixed a bug in the way 1.0 re-configured virtual hosts (bryan@rucus)
* Made the script read the /var/qmail/control files instead of explicitly
setting variables (for david@summersoft)
Version 1.0.2 - 28/08/98
* Fixed the bug introduced in v1.0.1 :( (keith@rucus)
* Fixed the way we recreate config files (noticed by Glen Stewart)
* Made the script check return values of system calls properly
* Fixed some of the taint checking stuff ... reports less in the logs now.
Version 1.0.3 - 03/10/98
* Fixed the alias-alias-alias-list bug in inlocal (bryan@rucus)
* Added a bit of online help
* Fixed the & in list owner (bryan@rucus)
* Added multi-level access to lists (based on idea by Glen Stewart)
Version 2.0 - 01/01/00
* Rewrote most of the code to take advantage of Mail::Ezmlm
* Made the webuser file more functional (users can alter it)
* Now handles all current, and future command line options
* Changed the colours :)
* Added support for ezmlm-cgi web archives
* Made it -w and use strict clean
* Moved all user config to a separate file
* Fixed the way we worked out list config - now complete
* Allowed a user specific config over-ride ``ezmlmwebrc''
* Allowed the printing of `nice' usernames (for Rhodes CS Dept)
* Took account of non-standard paths for moderators
* Removed all system() and `` calls from ezmlm-web.cgi
* Made `look and feel' virtually all user configurable
* Added a lot more context sensitive help
* Made ezmlm-web 99% language configurable - but no other templates yet :(
* Added support for creating databases
Version 2.1 - 25/09/00
* Fixed the multiple delete thing - finally!
* Fixed the '-' in username problem - The '-' in hostnames problem is fixed
in the new version of Mail::Ezmlm
* Fixed the '_' in list names problem
* Added support for file uploads of email addresses (multiple subscribe)
* Made error handling more friendly

View file

@ -0,0 +1,323 @@
$Id: README,v 1.2 2000/09/25 17:57:21 guy Exp $
=================
| ezmlm-web-2.1 |
=================
Contents
========
I. Copyright Stuff
II. Some Background
III. Requirements
IV. Files
V. Installation
VI. Notes
VII. Multi-level list access
VIII. Language Portability
IX. Bugs && Bug Reports
X. Acknowledgements
XI. Availability
I. Copyright Stuff - essentially the FreeBSD licence ...
==================
ezmlm-web - version 2.1 - 25/09/2000
Copyright (C) 1998, Guy Antony Halse, All Rights Reserved.
Please send bug reports and comments to guy-ezmlm@rucus.ru.ac.za
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
Neither name Guy Antony Halse nor the names of any contributors may be used
to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
II. Some Background
===================
The need for ezmlm-web arose from the fact that we host many student
societies on our system. These societies usually have a virtual host for web
and email, which is administered by a computer rep from the society. These
computer reps often have little or no knowledge of Unix and so we needed a
user friendly system that would let the create and maintain mailing lists
(such as members@foo.soc.ru.ac.za, committee@foo.soc.ru.ac.za, etc).
Since I am never keen to re-invent the wheel, I had a look at Steve Peterson's
script (http://virtation.com/qmail/ml-sub), which allows people to subscribe
and unsubscribe from mailing lists using a form->email gateway. This is fine
for putting on a web page saying "here come and join our mailing list", but
doesn't really allow you to administrate a list.
Security of mailing lists was a concern, as we really didn't want
unauthorised people to be able to alter some users list. Ezmlm-web itself
implements no security checks (apart from un-tainting input) and so relies
on the web server to do this (re-inventing the wheel again :). We use an
Apache webserver, so one can control access to a directory using a .htaccess
file or in the access.conf file. ApacheWeek have a good article on doing
this at http://www.apacheweek.com/features/userauth. I also give examples
later in this document.
This version of ezmlm-web (2.0) is based to a large extent on previous
versions that I have developed. It has however been totally re-written to
make use of the Mail::Ezmlm perl module I wrote. At the same time it was
updated and extended to include the new features of ezmlm-idx. It includes
many new features that have been suggested to me over the last few months,
and hopefully is now useful to a much larger group of people.
III. Requirements
=================
This version of ezmlm-web requires the following;
* qmail v1.03
* ezmlm v0.53 (idx v0.40)
* Perl v5.004 and the following modules;
+ Mail::Ezmlm v0.03
+ Mail::Address v1.15
+ CGI v2.6
+ CGI::Carp v1.06
+ DB_File v1.65
+ Getopt::Std v4.1
+ File::Find v?
+ File::Copy v2.02
The version number indicates the version of the module that ezmlm-web was
developed with. Earlier versions may work, but then they haven't been
tested. Have a look on http://www.CPAN.org/, http://www.qmail.org/, and
http://www.ezmlm.org/ for anything you are missing.
IV. Files
=========
In this distribution you should find 8 files;
README This file. Provides some background information, notes on
installation, etc. Not needed to run ezmlm-web.
CHANGES The change history. Not needed to run ezmlm-web
TODO This file is a list of things I intend doing in future
versions of ezmlm-web. That is if there are any future
versions :) Not needed to run ezmlm-web.
ezmlm-web.cgi The ezmlm-web script proper. This program requires that
you have perl5 installed on your machine and that your web
server is capable of running CGI scripts.
index.c A C wrapper to allow ezmlm-web.cgi to run suid. Not
strictly necessary if your setup allows perl scripts to
run suid, but I prefer using wrappers anyway. It needs to
be edited and compiled to suit your system. Not needed to
run ezmlm-web.
htaccess.sample A sample Apache .htaccess file for controlling access to
the mailing lists. If you use another web server, you will
have to work this bit out for yourself.
webusers.sample A sample webusers file for multi-level access control.
V. Installation
===============
1. Copy ezmlm-web.cgi to some publically readable directory. It does not
have to be in a path accessible to your web server, but any user with a
mailing list must be able to run it (Check the read and execute rights
on both the file and directory). We put our copy in
/usr/local/bin ...
3. Edit the ezmlmwebrc file and alter the variables at the top to suit
your particular system. In particular, you will probably have to change
the $ENV{'PATH'} variable. Be particularly careful about what you set
as the path. Too much is a security risk and too little will cause the
script to malfunction. Version 2.0 requires that the following programs
be accessible in your path; mv, rm
Also be careful about the $LIST_DIR variable. This script assumes that
all users store their mailing lists in the same sub directory of the
home directory (eg ~/lists). You can override this for an individual
user by recompiling the C wrapper to call ezmlm-web.cgi with a -d
option.
Other configurable options are documented in the ezmlmwebrc file
itself. I have tried to keep the amount of information that you need to
supply to a minimum and also make reasonable guesses about default
values.
4. Edit the index.c file and change the path to the path of your copy
of ezmlm-web.cgi. Then compile this file. You can do this by issuing
the command; gcc -o index.cgi index.c
5. For every user/virtual host that needs to manage mailing lists, you
need to create a SUID (user not root!!) copy of index.cgi (see
chmod(1) for details). These need to reside somewhere accessible by
the web server. I suggest that you put them in a sub directory (see
about security) of each user/virtual host's home directory (eg
/home/luser/public_html/ezmlm for Apache on Redhat).
The copies don't actually have to be called index.cgi, but it is nice
for web servers that can resolve a cgi script as an index page (see the
srm.conf file in Apache). It is important to make sure that whichever
directory you choose to put them can i: Execute CGI Scripts and ii: Be
access controlled (here I mean both web and user access) by some method
(eg .htaccess, access.conf for Apache).
6. Install some method of securing access to the page. The following
information is applicable to Apache web servers ... Detailed
information on user authentication can be obtained from the Apache
documentation (http://www.apache.org) and ApacheWeek
(http://www.apacheweek.com/features/userauth)
6.1 Ensure that your Apache setup will allow .htaccess file to control
access in the directory that contains. This is controlled by the
AllowOverride tag in access.conf. (Also ensure you have the
necessary Apache modules installed)
6.2 Create a htpasswd file. This is done using the htpasswd command that
comes with Apache. Its command line syntax is;
htpasswd [-c] passwordfile username
You need to put the passwordfile somewhere that is not accessible by
people through the web, and create an entry for each user you want
to have access ... See the ApacheWeek article for more details.
6.3 Create a .htaccess file in the directory that contains index.cgi.
Note that using Apache's built in access control, you can only control
access to directories, not individual files, hence the need for a
sub-directory in step 5.
The format of the .htaccess file should be along the lines of this;
AuthName EZ Mailing List Manager
AuthType Basic
AuthUserFile /path/to/passwordfile
require valid-user # or require user username
Again, see the ApacheWeek article for details.
7. Test the installation through the web. You should be asked for a
username and password (supplied in 6.2) and then be presented with a
screen entitled EZ Mailing List Manger. You can then try to create and
edit mailing lists ... Have Fun :)
VI. Notes
=========
* There is a function to delete mailing lists, but I really don't like the
idea. The only reason I put it in is that bvi@rucus asked for it.
If you set $UNSAFE_RD = 0 (the default) in the config section, the
ezmlm-web won't actually delete the list. In this case it moves the <list>
to .<list> and all the associated .qmail files to a sub-directory called
deleted.qmail/ (In the users home directory. This is by far a safer way
(since you can restore lists) and therefore I recommend it.
* The HTML interface has been tested using Nutscrape, Internet Exploder, and
Lynx. If anyone uses anything else and has problems, please let me know.
* I suggest that you make use of custom ezmlmwebrc files rather than using
the -d command line switches - it makes fault diagnosis easier ...
* Please see the section on languages below.
VII. Multi-Level Access
=======================
Ezmlm-web has a multi-level access system. This depends on a file called
webusers being present in $LIST_DIR. If the file is not present, then any
valid user has access to all lists. If, however, this file exists a number
of constraints come into place.
- The webusers file is scanned for either the list name (case insensitive) or
an ALL (case sensitive) entry.
- The list entry (or ALL) is scanned for the current user (as set in
$REMOTE_USER) or an ALL entry.
- If any valid match is made, then the user is allowed to edit the list.
Otherwise the user is politely told to go away ;-)
If list creation is allowed and the webusers file exists, then the person who
creates the list is the default owner. As of yet there is no way to add users
through the web interface, but I intend to do this eventually.
The format of a webusers file is as follows;
list1: user1, user2, user3
ALL: user1, user2
list2: ALL
ie; listname colon (:) and a comma (,) separated list of users. Spaces are
ignored but each list must appear on a new line.
Once this file exists, the ezmlm-web script will allow the list users to
configure their access lists along with any other options.
Oh, and BTW, list creation through the web can now be disabled. The way to do
this is to compile the wrapper calling ezmlm-web.cgi with a -c switch. See the
example index.c file for more details.
VIII. Language Portablity
=========================
One of the great new features of version 2.0 is that it is essentially
language independant (okay, not quite, but is 99% of the way there). Most of
the fixed strings, help, etc is defined in the RC file and thus can be
altered to suite a particular locale, language or even your own taste.
If anyone gets round to writing full templates for languages I would
appreciate it if you would do two things;
Firstly, make them public and announce them on the ezmlm@lists.cr.yp.to
mailing list so that others may benefit.
Secondly, please mail me a copy (guy-ezmlm@rucus.ru.ac.za) so that I may use
them in any future releases of ezmlm-web.
IX. Bugs && Bug Reports
=======================
I don't know of any bugs, but then this is a rewrite and a first release. It
has been tested reasonably well, but not exhaustively. I know it works on
FreeBSD 4.0-STABLE, FreeBSD 3.4-RELEASE, RedHat 5.1 and Redhat 6.0 all using
an Apache web server, but I would be interested to know whether it works on
other OSs and with other web servers. This version is far less dependent on
the OS than previous versions so I don't see any reason why it shouldn't.
Please mail bug reports and comments to guy-ezmlm@rucus.ru.ac.za
X. Acknowledgements
===================
* Keith Burdis (keith@rucus.ru.ac.za) - For constantly bugging me and
ensuring that I actually got round to writing some code :)
* Bryan Kilian (bryan@rucus.ru.ac.za) and the administrators of the
Litestep mailing list - For helping beta test and putting up with me
pestering them.
* Several societies at Rhodes. For switching to my web interface and so
unknowingly helping to beta test it.
* Barry Irwin (bvi@moria.org) - For trusting me and moving the Grahamstown
Foundation over to qmail and ezmlm - yet another beta tester :-)
* David Summers (david@summersoft.fay.ar.us) - For some ideas. And for
offering to make up an RPM version. I hope the offer still exists for
version 2.0 :-)
* Glen Stewart (glen_stewart@associate.com) - For a multitude of ideas.
* Fred Lindberg (lindberg@id.wustl.edu) for his useful posts to the
mailing list, suggestions, help, etc
* Galen Johnson (gjohnson@totalsports.net) - For some ideas on bugfixes.
XI. Availability
=================
The latest version of ezmlm-web will always be available on;
ftp://rucus.ru.ac.za/pub/mail/ezmlm/
More information on ezmlm-web and developments to ezmlm-web can be found at;
http://rucus.ru.ac.za/~guy/ezmlm/

View file

@ -0,0 +1,8 @@
$Id: TODO,v 1.3 2000/09/25 19:58:02 guy Exp $
TODO - ezmlm-web 2.1
- More Documentation
- Maybe allowing user specific overides on the -c option.
- Some nice install method. But then I use FreeBSD and ported it
so that might just count as my nice install method :)

View file

@ -0,0 +1,18 @@
$Id: UPGRADING,v 1.1 2000/09/25 19:24:20 guy Exp $
UPGRADING ezmlm-web 2.0 to ezmlm-web 2.1
There are no major changes that need to be made in order to upgrade. All
that is necessary is to add two new lines to your ezmlmwebrc ... In the top
section of the file add
$FILE_UPLOAD = 1;
and in the %HELPER section, you need to add
addaddressfile => 'or you may enter the filename of a plain text file containing multiple RFC822 email addresses, one per line',
(or just copy the new ezmlmwebrc :)
Have a look for these two lines in the new ezmlmwebrc included in this
distribution if you are unsure of how/where to put these.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,268 @@
# $Id: ezmlmwebrc,v 1.5 2000/09/25 18:25:26 guy Exp $
# Configuration file for ezmlm-web 2.1
# ===========================================================================
# This file is not just an ordinary configuration file - it contains valid
# perl statements that are executed just like any other perl script. When
# editing this file, be careful that it is still valid perl when you have
# finished (perl -w ezmlmwebrc ;-)
# It is divided into to logical parts. The first part configures the way
# ezmlm-web runs, and the second changes the language, etc of ezmlm-web. You
# can not arbitarilly exclude any statement, since the script doesn't define
# any defaults of its own. You could, however, always split this file up and
# include the parts with
#
# require('/path/to/other/part');
# ---------------------------------------------------------------------------
# Where do we store lists on this server ... Try "$HOME_DIR/lists".
# This directory will automatically be created if needed.
$LIST_DIR = "$HOME_DIR/lists";
# Safe list deletion?
# 0 = move list to .list and the .qmails to deleted.qmail/. Recoverable :)
# 1 = allow user to delete list completely. No backup, therefore no recovery.
$UNSAFE_RM = 0;
# Who is the alias user on this system (usually alias ;)
$ALIAS_USER = 'alias';
# Where do the qmail control files live on this system ...
$QMAIL_BASE = $Mail::Ezmlm::QMAIL_BASE . '/control';
# The url to our web interface - so we can use ezmlm-cgi if necessary
$EZMLM_CGI_URL = 'http://some.server.that.has/cgi-bin/ezmlm-cgi';
# Where our ezcgirc file lives (probably /etc/ezmlm/ezcgirc)
$EZMLM_CGI_RC = '/etc/ezmlm/ezcgirc';
# Do we want to allow ``pretty'' names - ie more human readable ones
# This will slow ezmlm-web down a bit for large lists
$PRETTY_NAMES = 1;
# Do we want to allow the users to be allowed to upload a file containing
# lists of email addresses to subscribe?
$FILE_UPLOAD = 1;
# What switches to we want ezmlm-web to have on as default. The ezmlm-make
# defaults are aBDFGHIJKLMNOpQRSTUWX (small means enabled, CAPITALS mean
# disabled). The defaults below should be reasonable - I use them ;)
$DEFAULT_OPTIONS = 'aBDFGHiJkLMNOpQRSTUWx';
# Where do we find the nice little help icon - by default HELP_ICON_URL
# points to resources on http://rucus.ru.ac.za/. This will work, but we
# would appreciate it if you changed this to a local site.
$HELP_ICON_URL = 'http://rucus.ru.ac.za/icons/small/unknown.gif';
# Header for every page (.= concatinates)
$HTML_HEADER = '<TABLE BORDER="3" ALIGN="CENTER" CELLPADDING="5"><TR><TD BGCOLOR="#e0e0ff"><FONT SIZE=+3 COLOR=#000080><STRONG>E Z Mailing List Manager</STRONG></FONT></TD></TR></TABLE></CENTER><P>';
$HTML_HEADER .= '<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" ALIGN="CENTER" WIDTH="99%"><TR><TD BGCOLOR="#e0e0ff">';
# Footer for every page (.= concatinates)
$HTML_FOOTER = '</TD></TR></TABLE>';
$HTML_FOOTER .= '<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" ALIGN="CENTER" WIDTH="99%"><TR><TD BGCOLOR="#e0e0ff">';
$HTML_FOOTER .= '<FONT SIZE="-1"><A HREF="http://rucus.ru.ac.za/~guy/ezmlm/#ezmlm-web" TARGET="_blank">ezmlm-web</A> (v2.1) A web interface to <A HREF="http://www.ezmlm.org/" TARGET="_blank">ezmlm</A></FONT></TD></TR></TABLE>';
# What colour do we want the background to be?
$HTML_BGCOLOR = '#000080';
# What colour do we want text?
$HTML_TEXT = '#000000';
# What color do we want links?
$HTML_LINK = '#3333ff';
# What color to we want visited links?
$HTML_VLINK = '#8888ff';
# What is the title of this document?
$HTML_TITLE = 'E Z Mailing List Manager';
# ---------------------------------------------------------------------------
# The meanings of the various ezmlm-make command line switches. The default
# ones match the ezmlm-idx 0.4 default ezmlmrc ... Alter them to suit your
# own ezmlmrc. Removing options from this list makes them unavailable
# through ezmlm-web - this could be useful for things like -w
%EZMLM_LABELS = (
# option => ['Short Name',
# 'Long Help Description'],
a => ['Archived',
'Ezmlm will archive new messages'],
b => ['Block archive',
'Only moderators are allowed to access the archive'],
# c => config. This is implicity called, so is not defined here
d => ['Digest',
'Set up a digest list to disseminate digest of the list messages'],
# e => edit. Also implicity called, so not defined here
f => ['Prefix',
'Outgoing subject will be prefixed with the list name'],
g => ['Guard Archive',
'Archive access requests from unrecognized SENDERs will be rejected'],
h => ['Help subscription',
'Subscriptions do not require confirmation'],
i => ['Indexed',
'Indexed for WWW archive access'],
j => ['Jump off',
'Unsubscribe does not require confirmation'],
k => ['Kill',
'Posts from addresses in dir/deny/ are rejected'],
l => ['Subscriber List',
'Remote administrators can request a subscriber list'],
m => ['Message Moderation',
'All incoming messages are moderated'],
n => ['Text Editing',
'Allow remote administrators to edit files in dir/text/'],
o => ['Others rejected',
'Posts from addresses other than moderators are rejected'],
p => ['Public',
'List will respond to administrative requests and archive retrieval'],
q => ['Service Request Address',
'Process commands sent in the subject to local-request@host'],
r => ['Remote Admin',
'Enable remote adminstration of the list'],
s => ['Subscription Moderation',
'Subscriptions to the main list and digest will be moderated'],
t => ['Trailer',
'Add a trailer to outgoing messages'],
u => ['User Posts Only',
'Posts from unrecognized SENDER addresses will be rejected'],
# v => version. I doubt you will really need this ;-)
w => ['Remove Warn',
'Remove the ezmlm-warn(1) invocations from the list setup. It is assumed that ezmlm-warn(1) is run by other means'],
x => ['Extra',
'Strip certain mimetypes, etc'],
# y => not used
# z => not used
# These all take an extra argument, which is the default value to use
0 => ['Sublist',
'Make the list a sublist of list mainlist@host',
'mainlist@host'],
# 1 => not used
# 2 => not used
3 => ['From Address',
'Replace the &quot;From:&quot; header of the message with &quot;From: fromarg&quot;',
'fromarg'],
4 => ['Digest Options',
'Switches for ezmlm-tstdig(1)',
'-t24 -m30 -k64'],
5 => ['List Owner',
'The email address of the list owner',
''],
6 => ['SQL Database',
'SQL database connect information. Requires SQL support',
'host:port:user:password:datab:table'],
7 => ['Message Moderation Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path'],
8 => ['Subscription Moderation Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path'],
9 => ['Remote Admin Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path']
);
# This list defines most of the context sensitive help in ezmlm-web. What
# isn't defined here is the options, which are defined above ... You can
# alter these if you feel something else would make more sense to your users
# Just be careful of what can fit on a screen!
%HELPER = (
# These should be self explainitory
addaddress => 'You may enter any RFC822 compliant email address here, including the comment part. For example; J Random User <jru@on.web.za>',
addaddressfile => 'or you may enter the filename of a plain text file containing multiple RFC822 email addresses, one per line',
moderator => 'Moderators: people who control who may subscribe or post to a list',
deny => 'Deny: A list of addresses that are _never_ allowed to mail the list',
allow => 'Allow: A list of address that are allowed to mail the list even if the configuration otherwise restricts it',
digest => 'Digest: People who will recieve a digest of all messages on the list',
webarch => 'View the web based archive of this list',
config => 'This lets you alter the way the list is set up',
listname => 'This is the name of the list as displayed on the Select Lists screen. It is also the name of the subdirectory that contains the list',
listadd => 'This is the email address of the list. Note that the defaults come from your qmail config. You should just update the local part (before the @)',
webusers => 'NB! At this stage, any users specified here must exist. User creation may be added in future versions',
prefix => 'Text to add to the subject line of all outgoing messages',
headerremove => 'This is a list of headers to remove from all outgoing mail',
headeradd => 'This is a list of headers to add to all outging mail',
mimeremove => 'All messages whose Content-Type matches these mime types will be bounced back to sender',
allowedit => 'Comma separated list of usernames, or <CODE>ALL</CODE> (all valid users)',
mysqlcreate => 'This will create the necessary MySQL tables if the list configuration above requires it'
);
# This defines the captions of each of the buttons in ezmlm-web, and allows
# you to configure them for your own language or taste. Since these are used
# by the switching algorithm it is important that every button has a unique
# caption - ie we can't have two 'Edit' buttons doing different things.
%BUTTON = (
# These MUST all be unique!
create => 'Create',
createlist => 'Create List',
edit => 'Edit',
delete => 'Delete',
deleteaddress => 'Delete Address',
addaddress => 'Add Address',
moderators => 'Moderators',
denylist => 'Deny List',
allowlist => 'Allow List',
digestsubscribers => 'Digest Subscribers',
configuration => 'Configuration',
yes => 'Yes',
no => 'No',
updateconfiguration => 'Update Configuration',
edittexts => 'Edit Texts',
editfile => 'Edit File',
savefile => 'Save File',
webarchive => 'Web Archive',
selectlist => 'Select List',
subscribers => 'Subscribers',
cancel => 'Cancel',
resetform => 'Reset Form',
);
# This defines the fixed text strings that are used in ezmlm-web. By editing
# these along with the button labels and help texts, you can convert ezmlm-web
# to another language :-) If anyone gets arround to doing complete templates
# for other languages I would appreciate a copy so that I can include it in
# future releases of ezmlm-web.
%LANGUAGE = (
nop => 'Action not yet implemented',
chooselistinfo => "<UL><LI>Choose a mailing list from the selection box or click on [$BUTTON{'create'}].<LI>Click on the [$BUTTON{'edit'}] button if you want to edit the selected list.<LI>Click on the [$BUTTON{'delete'}] button if you want to delete the selected list.</UL>",
confirmdelete => 'Confirm deletion of', # list name
subscribersto => 'Subscribers to', # list name
subscribers => 'subscribers',
additionalparts => 'Additional list parts',
posting => 'Posting',
subscription => 'Subscription',
remoteadmin => 'Remote Admin',
for => 'for', # as in; moderators for blahlist
createnew => 'Create a New List',
listname => 'List Name',
listaddress => 'List Address',
listoptions => 'List Options',
allowedtoedit => 'Users allowed to edit this list',
editconfiguration => 'Edit the List Configuration',
prefix => 'Subject prefex for outgoing messages',
headerremove => 'Headers to strip from all outgoing mail',
headeradd => 'Headers to add to all outgoing mail',
mimeremove => 'Mime types to strip from all outgoing mail',
edittextinfo => "The box on the left contains a list of files available in the<BR>DIR/text directory. These files are sent out in response to specfic user request, or as part of all outgoing messages<P>To edit a file, select its name from the box. Then click on the [$BUTTON{'editfile'}] button.<P>Press [$BUTTON{'cancel'}] when you have finished editing.",
editingfile => 'Editing File',
editfileinfo => '<BIG><STRONG>ezmlm-manage</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt;</STRONG></TT> The list name<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> The subscription address<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> The address a subscriber must reply to<P><BIG><STRONG>ezmlm-store</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt;</STRONG></TT> The list name<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> The acceptance address<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> The rejection address</UL>',
mysqlcreate => 'Create the MySQL database tables if necessary',
);
# === Configuration file ends ===

View file

@ -0,0 +1,9 @@
#$Id: htaccess.sample,v 1.1 2000/01/29 11:35:40 guy Exp $
#
#order deny,allow
#deny from all
#allow from .ru.ac.za
AuthName "EZ Mailing List Manager
AuthType Basic
AuthUserFile /etc/ezmlm/.htusers
require valid-user

View file

@ -0,0 +1,25 @@
/* $Id: index.c,v 1.2 2000/09/25 18:14:12 guy Exp $ */
#include <stdio.h>
/* C wrapper to allow ezmlm-web.cgi to run suid */
/* Copyright (C) 1999/2000, Guy Antony Halse, All Rights Reserved */
/* See the README file in this distribution for copyright information */
int main(void) {
/* Change this path to wherever you decided to put ezmlm-web.cgi */
execv("/usr/local/bin/ezmlm-web.cgi");
/* Note that you could also use the following to allow a specific user
to store their mailing lists in a different directory defined by
/tmp/ezmlm-web-demo ... This over-rides the default . */
/* Look at the exec(3) man page if you don't understand how the arguments
list below works */
/*
char *switches[] = { "ezmlm-web.cgi", "-d", "/tmp/ezmlm-web-demo", NULL };
execv("/usr/local/bin/ezmlm-web.cgi", switches);
*/
}

View file

@ -0,0 +1,4 @@
comm: guy, arb
users: arb
members: ALL
ALL: root

91
ezmlm-web/trunk/CHANGES Normal file
View file

@ -0,0 +1,91 @@
$Id: CHANGES,v 1.2 2000/09/25 17:54:06 guy Exp $
REVISION HISTORY - ezmlm-web.cgi
================================
Version 0.1 - 10/04/98 (Not Released)
* University Vac - I was bored and started to play. The first version just
let people play with the subscribers list. No moderators, no nothing.
Version 0.2 - 13/04/98 (Not Released)
* Allow list creation
* Allowed users to edit moderators
Version 0.3 - 15/04/98
* Allow list deletion (for balin@moria.org)
* Made changes to allow it to run on RedHat 4.2 as well as FreeBSD 3.0
* Fixed some minor bugs (cosmetic irritaions really) that people noticed
* Sorted subscribers list into alphabetical order.
* Added command line switch to change list directory (for nxsy@moria.org)
* Wrote some documentation ...
Version 0.4 - 28/04/98
* Fixed up virtual domain (inlocal) stuff as spotted by bryan@rucus
* Allowed the list directory to be automatically created if necessary.
Version 0.5 - 12/05/98 (Not Released)
* More bug fixes. Mainly for mathew@graham.
Version 1.0 - 01/08/98
* Complete re-write to convert to perl5 and CGI.pm
* Removed a lot of dependancy on the OS. Use builtin functions instead :)
* Added support for ezmlm-idx
* Added a lot more command line option support (-adfgiklmnpqsrstux5)
* Added support for digests and digest subscribers
* Added support for blacklists
* Allowed users to edit the config of existing lists
* Allowed the user to edit headeradd and headerremove as well as mimeremove
* Allowed user to edit any of the files in DIR/text
* Revised interface to make it more user-friendly and ergonomic.
* Changed the background colour for Kether (clb@rucus) *gryn*
* Removed a big bug in the delete_list function that had gone unnoticed.
Version 1.0.1 - 10/08/98
* Fixed a bug in the way 1.0 re-configured virtual hosts (bryan@rucus)
* Made the script read the /var/qmail/control files instead of explicitly
setting variables (for david@summersoft)
Version 1.0.2 - 28/08/98
* Fixed the bug introduced in v1.0.1 :( (keith@rucus)
* Fixed the way we recreate config files (noticed by Glen Stewart)
* Made the script check return values of system calls properly
* Fixed some of the taint checking stuff ... reports less in the logs now.
Version 1.0.3 - 03/10/98
* Fixed the alias-alias-alias-list bug in inlocal (bryan@rucus)
* Added a bit of online help
* Fixed the & in list owner (bryan@rucus)
* Added multi-level access to lists (based on idea by Glen Stewart)
Version 2.0 - 01/01/00
* Rewrote most of the code to take advantage of Mail::Ezmlm
* Made the webuser file more functional (users can alter it)
* Now handles all current, and future command line options
* Changed the colours :)
* Added support for ezmlm-cgi web archives
* Made it -w and use strict clean
* Moved all user config to a separate file
* Fixed the way we worked out list config - now complete
* Allowed a user specific config over-ride ``ezmlmwebrc''
* Allowed the printing of `nice' usernames (for Rhodes CS Dept)
* Took account of non-standard paths for moderators
* Removed all system() and `` calls from ezmlm-web.cgi
* Made `look and feel' virtually all user configurable
* Added a lot more context sensitive help
* Made ezmlm-web 99% language configurable - but no other templates yet :(
* Added support for creating databases
Version 2.1 - 25/09/00
* Fixed the multiple delete thing - finally!
* Fixed the '-' in username problem - The '-' in hostnames problem is fixed
in the new version of Mail::Ezmlm
* Fixed the '_' in list names problem
* Added support for file uploads of email addresses (multiple subscribe)
* Made error handling more friendly
Version 2.2 - 26/01/02005
* German translation of the web interface - more translations can be added easily
* changed "ALT"-tags to "TITLE" - most browsers will display the tooltip texts now
* fixed security problems (permissions were not thoroughly check)
* user-based permission for creating lists (can be set in webusersrc)
* the location of the webusers file is now an option in ezmlmwebrc

89
ezmlm-web/trunk/INSTALL Normal file
View file

@ -0,0 +1,89 @@
1. Copy ezmlm-web.cgi to some publically readable directory. It does not
have to be in a path accessible to your web server, but any user with a
mailing list must be able to run it (Check the read and execute rights
on both the file and directory). We put our copy in
/usr/local/bin ...
3. Edit the ezmlmwebrc file and alter the variables at the top to suit
your particular system. In particular, you will probably have to change
the $ENV{'PATH'} variable. Be particularly careful about what you set
as the path. Too much is a security risk and too little will cause the
script to malfunction. Version 2.0 requires that the following programs
be accessible in your path; mv, rm
Also be careful about the $LIST_DIR variable. This script assumes that
all users store their mailing lists in the same sub directory of the
home directory (eg ~/lists). You can override this for an individual
user by recompiling the C wrapper to call ezmlm-web.cgi with a -d
option.
Other configurable options are documented in the ezmlmwebrc file
itself. I have tried to keep the amount of information that you need to
supply to a minimum and also make reasonable guesses about default
values.
finally, copy the ezmlmwebrc file and the "lang" directory to one of
the following places:
- /etc/ezmlm
- the home directory of the user that runs ezmlm-web.cgi
- the directory, that contains your ezmlm-web.cgi file
4. Edit the index.c file and change the path to the path of your copy
of ezmlm-web.cgi. Then compile this file. You can do this by issuing
the command; gcc -o index.cgi index.c
5. For every user/virtual host that needs to manage mailing lists, you
need to create a SUID (user not root!!) copy of index.cgi (see
chmod(1) for details). These need to reside somewhere accessible by
the web server. I suggest that you put them in a sub directory (see
about security) of each user/virtual host's home directory (eg
/home/luser/public_html/ezmlm for Apache on Redhat).
The copies don't actually have to be called index.cgi, but it is nice
for web servers that can resolve a cgi script as an index page (see the
srm.conf file in Apache). It is important to make sure that whichever
directory you choose to put them can i: Execute CGI Scripts and ii: Be
access controlled (here I mean both web and user access) by some method
(eg .htaccess, access.conf for Apache).
6. Install some method of securing access to the page. The following
information is applicable to Apache web servers ... Detailed
information on user authentication can be obtained from the Apache
documentation (http://www.apache.org) and ApacheWeek
(http://www.apacheweek.com/features/userauth)
6.1 Ensure that your Apache setup will allow .htaccess file to control
access in the directory that contains. This is controlled by the
AllowOverride tag in access.conf. (Also ensure you have the
necessary Apache modules installed)
6.2 Create a htpasswd file. This is done using the htpasswd command that
comes with Apache. Its command line syntax is;
htpasswd [-c] passwordfile username
You need to put the passwordfile somewhere that is not accessible by
people through the web, and create an entry for each user you want
to have access ... See the ApacheWeek article for more details.
6.3 Create a .htaccess file in the directory that contains index.cgi.
Note that using Apache's built in access control, you can only control
access to directories, not individual files, hence the need for a
sub-directory in step 5.
The format of the .htaccess file should be along the lines of this;
AuthName EZ Mailing List Manager
AuthType Basic
AuthUserFile /path/to/passwordfile
require valid-user # or require user username
Again, see the ApacheWeek article for details.
7. Test the installation through the web. You should be asked for a
username and password (supplied in 6.2) and then be presented with a
screen entitled EZ Mailing List Manger. You can then try to create and
edit mailing lists ... Have Fun :)
If you have any problems, then you can:
- take a look at https://systemausfall.org/toolforge/ezmlm-web
- send me an email: ezmlm-web@sumpfralle.de

270
ezmlm-web/trunk/README Normal file
View file

@ -0,0 +1,270 @@
$Id: README,v 1.2 2000/09/25 17:57:21 guy Exp $
=================
| ezmlm-web-2.1 |
=================
If you only want to know how to install ezmlm-web, then you should
read INSTALL.
Contents
========
I. Copyright Stuff
II. Some Background
III. Requirements
IV. Files
V. Notes
VI. Multi-level list access
VII. Language Portability
VIII. Bugs && Bug Reports
XI. Acknowledgements
X. Availability
I. Copyright Stuff - essentially the FreeBSD licence ...
==================
ezmlm-web - version 2.1 - 25/09/2000
Copyright (C) 1998, Guy Antony Halse, All Rights Reserved.
Please send bug reports and comments to guy-ezmlm@rucus.ru.ac.za
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
Neither name Guy Antony Halse nor the names of any contributors may be used
to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
II. Some Background
===================
The need for ezmlm-web arose from the fact that we host many student
societies on our system. These societies usually have a virtual host for web
and email, which is administered by a computer rep from the society. These
computer reps often have little or no knowledge of Unix and so we needed a
user friendly system that would let the create and maintain mailing lists
(such as members@foo.soc.ru.ac.za, committee@foo.soc.ru.ac.za, etc).
Since I am never keen to re-invent the wheel, I had a look at Steve Peterson's
script (http://virtation.com/qmail/ml-sub), which allows people to subscribe
and unsubscribe from mailing lists using a form->email gateway. This is fine
for putting on a web page saying "here come and join our mailing list", but
doesn't really allow you to administrate a list.
Security of mailing lists was a concern, as we really didn't want
unauthorised people to be able to alter some users list. Ezmlm-web itself
implements no security checks (apart from un-tainting input) and so relies
on the web server to do this (re-inventing the wheel again :). We use an
Apache webserver, so one can control access to a directory using a .htaccess
file or in the access.conf file. ApacheWeek have a good article on doing
this at http://www.apacheweek.com/features/userauth. I also give examples
later in this document.
This version of ezmlm-web is based to a large extent on previous
versions that I have developed. It has however been totally re-written to
make use of the Mail::Ezmlm perl module I wrote. At the same time it was
updated and extended to include the new features of ezmlm-idx. It includes
many new features that have been suggested to me over the last few months,
and hopefully is now useful to a much larger group of people.
Since 02005 ezmlm-web is maintained by Lars Kruse (ezmlm-web@sumpfralle.de).
Only minor improvements had to be implemented to keep the already fully
functional ezmlm-web up to date.
III. Requirements
=================
This version of ezmlm-web requires the following;
* qmail v1.03
* ezmlm v0.53 (idx v0.40)
* Perl v5.004 and the following modules;
+ Mail::Ezmlm v0.03
+ Mail::Address v1.15
+ CGI v2.6
+ CGI::Carp v1.06
+ DB_File v1.65
+ Getopt::Std v4.1
+ File::Find v?
+ File::Copy v2.02
The version number indicates the version of the module that ezmlm-web was
developed with. Earlier versions may work, but then they haven't been
tested. Have a look on http://www.CPAN.org/, http://www.qmail.org/, and
http://www.ezmlm.org/ for anything you are missing.
IV. Files
=========
In this distribution you should find 8 files;
README This file. Provides some background information.
Not needed to run ezmlm-web.
INSTALL Notes on installation. Not needed to run ezmlm-web.
CHANGES The change history. Not needed to run ezmlm-web
TODO This file is a list of things I intend doing in future
versions of ezmlm-web. Not needed to run ezmlm-web.
ezmlm-web.cgi The ezmlm-web script proper. This program requires that
you have perl5 installed on your machine and that your web
server is capable of running CGI scripts.
index.c A C wrapper to allow ezmlm-web.cgi to run suid. Not
strictly necessary if your setup allows perl scripts to
run suid, but I prefer using wrappers anyway. It needs to
be edited and compiled to suit your system. Not needed to
run ezmlm-web.
ezmlmwebrc This is the configuration file for ezmlm-web. All options
are explained in this example file. You will need this
file to run ezmlm-web.
htaccess.sample A sample Apache .htaccess file for controlling access to
the mailing lists. If you use another web server, you will
have to work this bit out for yourself.
webusers.sample A sample webusers file for multi-level access control.
The directory "lang" contains the language files. You will need at least the
one, that you have choosen in "ezmlmwebrc" by the option "HTML_LANGUAGE".
V. Notes
=========
* There is a function to delete mailing lists, but I really don't like the
idea. The only reason I put it in is that bvi@rucus asked for it.
If you set $UNSAFE_RD = 0 (the default) in the config section, the
ezmlm-web won't actually delete the list. In this case it moves the <list>
to .<list> and all the associated .qmail files to a sub-directory called
deleted.qmail/ (In the users home directory. This is by far a safer way
(since you can restore lists) and therefore I recommend it.
* The HTML interface has been tested using Nutscrape, Internet Exploder, and
Lynx. If anyone uses anything else and has problems, please let me know.
* I suggest that you make use of custom ezmlmwebrc files rather than using
the -d command line switches - it makes fault diagnosis easier ...
* Please see the section on languages below.
VI. Multi-Level Access
=======================
Ezmlm-web has a multi-level access system. This depends on a file called
webusers being present in $LIST_DIR. If the file is not present, then any
valid user has access to all lists. If, however, this file exists a number
of constraints come into place.
- The webusers file is scanned for either the list name (case insensitive) or
an ALL (case sensitive) entry.
- The list entry (or ALL) is scanned for the current user (as set in
$REMOTE_USER) or an ALL entry.
- If any valid match is made, then the user is allowed to edit the list.
Otherwise the user is politely told to go away ;-)
If list creation is allowed and the webusers file exists, then the person who
creates the list is the default owner. As of yet there is no way to create users
through the web interface, but I intend to do this eventually.
The format of a webusers file is as follows;
list1: user1, user2, user3
ALL: user1, user2
list2: ALL
ie; listname colon (:) and a comma (,) separated list of users. Spaces are
ignored but each list must appear on a new line.
Once this file exists, the ezmlm-web script will allow the list users to
configure their access lists along with any other options.
You can permit some users to create lists by adding a line similar to the
following to your webusers file:
ALLOW_CREATE: user2, user3
If there is no line starting with "ALLOW_CREATE:" in the webusers file, then
no one will be allowed to create lists. This behaviour is new for ezmlm-web
since version 2.2. To stay compatible to old installations, the commandline
option "-c" for ezmlm-web.cgi will still allow everyone to create lists. The
use of this option is deprecated, since the line "ALLOW_CREATE: ALL" provides
the same effect in a cleaner way.
VII. Language Portablity
=========================
One of the great new features of version 2.0 is that it is essentially
language independant (okay, not quite, but is 99% of the way there). Most of
the fixed strings, help, etc is defined in the files of lang directory.
Of course you can change them or create a new translation.
The language can be selected in ezmlmwebrc with the "HTML_LANGUAGE" option.
If anyone gets round to writing full templates for languages I would
appreciate it if you would do two things;
Firstly, make them public and announce them on the ezmlm@lists.cr.yp.to
mailing list so that others may benefit.
Secondly, please mail me a copy (ezmlm-web@sumpfralle.de) so that I may use
them in any future releases of ezmlm-web.
VIII. Bugs && Bug Reports
=======================
I don't know of any bugs, but then this is a rewrite and a first release. It
has been tested reasonably well, but not exhaustively. I know it works on
FreeBSD 4.0-STABLE, FreeBSD 3.4-RELEASE, RedHat 5.1 and Redhat 6.0 all using
an Apache web server, but I would be interested to know whether it works on
other OSs and with other web servers. This version is far less dependent on
the OS than previous versions so I don't see any reason why it shouldn't.
Please mail bug reports and comments to ezmlm-web@sumpfralle.de.
IX. Acknowledgements
===================
* Guy Antony Halse (guy-ezmlm@rucus.ru.ac.za) - He created ezmlm-web,
maintained it till 02005 and wrote nearly every line of code!
* Keith Burdis (keith@rucus.ru.ac.za) - For constantly bugging me and
ensuring that I actually got round to writing some code :)
* Bryan Kilian (bryan@rucus.ru.ac.za) and the administrators of the
Litestep mailing list - For helping beta test and putting up with me
pestering them.
* Several societies at Rhodes. For switching to my web interface and so
unknowingly helping to beta test it.
* Barry Irwin (bvi@moria.org) - For trusting me and moving the Grahamstown
Foundation over to qmail and ezmlm - yet another beta tester :-)
* David Summers (david@summersoft.fay.ar.us) - For some ideas. And for
offering to make up an RPM version. I hope the offer still exists for
version 2.0 :-)
* Glen Stewart (glen_stewart@associate.com) - For a multitude of ideas.
* Fred Lindberg (lindberg@id.wustl.edu) for his useful posts to the
mailing list, suggestions, help, etc
* Galen Johnson (gjohnson@totalsports.net) - For some ideas on bugfixes.
X. Availability
=================
More information on ezmlm-web and developments to ezmlm-web can be found at:
https://systemausfall.org/toolforge/ezmlm-web
The website of Guy Antony Halse (the author of ezmlm-web) is still at:
http://rucus.ru.ac.za/~guy/ezmlm/
The old ftp-archive of ezmlm-web is still available on:
ftp://rucus.ru.ac.za/pub/mail/ezmlm/

8
ezmlm-web/trunk/TODO Normal file
View file

@ -0,0 +1,8 @@
$Id: TODO,v 1.3 2000/09/25 19:58:02 guy Exp $
TODO - ezmlm-web 2.1
- More Documentation
- Some nice install method. But then I use FreeBSD and ported it
so that might just count as my nice install method :)
- Option for a css-stylesheet

39
ezmlm-web/trunk/UPGRADING Normal file
View file

@ -0,0 +1,39 @@
$Id: UPGRADING,v 1.1 2000/09/25 19:24:20 guy Exp $
UPGRADING ezmlm-web 2.1 to ezmlm-web 2.2
1) Creating of new lists is now controlled by a line in the webusers file instead
of a commandline switch for ezmlm-web.cgi.
necessary changes:
- optional: remove switch "-c" when calling ezmlm-web.cgi (take a look at index.c)
- optional: add a line like "ALLOW_CREATE: john, myra" to the webusers file
2) The location of the webusers file is now defined in ezmlmwebrc. (default: $LIST_DIR/webusers)
necessary changes:
- optional: add a line like "$WEBUSERS_FILE = /home/ml/webusers" to ezmlmwebrc
3) A german translation is available.
- optional: include "lang/de.pm" in ezmlmwebrc (there you can also remove the english definitions)
or copy the new ezmlmwebrc :)
------------------------------------------------------------------------------
UPGRADING ezmlm-web 2.0 to ezmlm-web 2.1
There are no major changes that need to be made in order to upgrade. All
that is necessary is to add two new lines to your ezmlmwebrc ... In the top
section of the file add
$FILE_UPLOAD = 1;
and in the %HELPER section, you need to add
addaddressfile => 'or you may enter the filename of a plain text file containing multiple RFC822 email addresses, one per line',
(or just copy the new ezmlmwebrc :)
Have a look for these two lines in the new ezmlmwebrc included in this
distribution if you are unsure of how/where to put these.

1130
ezmlm-web/trunk/ezmlm-web.cgi Executable file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,85 @@
# $Id: ezmlmwebrc,v 1.5 2000/09/25 18:25:26 guy Exp $
# Configuration file for ezmlm-web 2.1
# ===========================================================================
# This file is not just an ordinary configuration file - it contains valid
# perl statements that are executed just like any other perl script. When
# editing this file, be careful that it is still valid perl when you have
# finished (perl -w ezmlmwebrc ;-)
# ---------------------------------------------------------------------------
# Where do we store lists on this server ... Try "$HOME_DIR/lists".
# This directory will automatically be created if needed.
$LIST_DIR = "$HOME_DIR/lists";
# Where is the webusers file for access-permissions
# defaults to "$LIST_DIR/webusers"
$WEBUSERS_FILE = "$LIST_DIR/webusers";
# Safe list deletion?
# 0 = move list to .list and the .qmails to deleted.qmail/. Recoverable :)
# 1 = allow user to delete list completely. No backup, therefore no recovery.
$UNSAFE_RM = 0;
# Who is the alias user on this system (usually alias ;)
$ALIAS_USER = 'alias';
# Where do the qmail control files live on this system ...
$QMAIL_BASE = $Mail::Ezmlm::QMAIL_BASE . '/control';
# The url to our web interface - so we can use ezmlm-cgi if necessary
$EZMLM_CGI_URL = 'http://some.server.that.has/cgi-bin/ezmlm-cgi';
# Where our ezcgirc file lives (probably /etc/ezmlm/ezcgirc)
$EZMLM_CGI_RC = '/etc/ezmlm/ezcgirc';
# Do we want to allow ``pretty'' names - ie more human readable ones
# This will slow ezmlm-web down a bit for large lists
$PRETTY_NAMES = 1;
# Do we want to allow the users to be allowed to upload a file containing
# lists of email addresses to subscribe?
$FILE_UPLOAD = 1;
# What switches to we want ezmlm-web to have on as default. The ezmlm-make
# defaults are aBDFGHIJKLMNOpQRSTUWX (small means enabled, CAPITALS mean
# disabled). The defaults below should be reasonable - I use them ;)
$DEFAULT_OPTIONS = 'aBDFGHiJkLMNOpQRSTUWx';
# Where do we find the nice little help icon - by default HELP_ICON_URL
# points to resources on http://rucus.ru.ac.za/. This will work, but we
# would appreciate it if you changed this to a local site.
$HELP_ICON_URL = 'http://rucus.ru.ac.za/icons/small/unknown.gif';
# Header for every page (.= concatinates)
$HTML_HEADER = '<TABLE BORDER="3" ALIGN="CENTER" CELLPADDING="5"><TR><TD BGCOLOR="#e0e0ff"><FONT SIZE=+3 COLOR=#000080><STRONG>E Z Mailing List Manager</STRONG></FONT></TD></TR></TABLE></CENTER><P>';
$HTML_HEADER .= '<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" ALIGN="CENTER" WIDTH="99%"><TR><TD BGCOLOR="#e0e0ff">';
# Footer for every page (.= concatinates)
$HTML_FOOTER = '</TD></TR></TABLE>';
$HTML_FOOTER .= '<TABLE BORDER="0" CELLPADDING="5" CELLSPACING="5" ALIGN="CENTER" WIDTH="99%"><TR><TD BGCOLOR="#e0e0ff">';
$HTML_FOOTER .= '<FONT SIZE="-1"><A HREF="http://rucus.ru.ac.za/~guy/ezmlm/#ezmlm-web" TARGET="_blank">ezmlm-web</A> (v2.1) A web interface to <A HREF="http://www.ezmlm.org/" TARGET="_blank">ezmlm</A></FONT></TD></TR></TABLE>';
# What colour do we want the background to be?
$HTML_BGCOLOR = '#000080';
# What colour do we want text?
$HTML_TEXT = '#000000';
# What color do we want links?
$HTML_LINK = '#3333ff';
# What color to we want visited links?
$HTML_VLINK = '#8888ff';
# What is the title of this document?
$HTML_TITLE = 'E Z Mailing List Manager';
# choose a language (en|de)
$HTML_LANGUAGE = 'en';
# ---------------------------------------------------------------------------
# include language-specific definitions
require('./lang/' . $HTML_LANGUAGE . '.pm');

View file

@ -0,0 +1,9 @@
#$Id: htaccess.sample,v 1.1 2000/01/29 11:35:40 guy Exp $
#
#order deny,allow
#deny from all
#allow from .ru.ac.za
AuthName "EZ Mailing List Manager
AuthType Basic
AuthUserFile /etc/ezmlm/.htusers
require valid-user

25
ezmlm-web/trunk/index.c Normal file
View file

@ -0,0 +1,25 @@
/* $Id: index.c,v 1.2 2000/09/25 18:14:12 guy Exp $ */
#include <stdio.h>
/* C wrapper to allow ezmlm-web.cgi to run suid */
/* Copyright (C) 1999/2000, Guy Antony Halse, All Rights Reserved */
/* See the README file in this distribution for copyright information */
int main(void) {
/* Change this path to wherever you decided to put ezmlm-web.cgi */
execv("/usr/local/bin/ezmlm-web.cgi");
/* Note that you could also use the following to allow a specific user
to store their mailing lists in a different directory defined by
/tmp/ezmlm-web-demo ... This over-rides the default . */
/* Look at the exec(3) man page if you don't understand how the arguments
list below works */
/*
char *switches[] = { "ezmlm-web.cgi", "-d", "/tmp/ezmlm-web-demo", NULL };
execv("/usr/local/bin/ezmlm-web.cgi", switches);
*/
}

187
ezmlm-web/trunk/lang/de.pm Normal file
View file

@ -0,0 +1,187 @@
# language-specific definitions for ezmlm-web
# in english
# The meanings of the various ezmlm-make command line switches. The default
# ones match the ezmlm-idx 0.4 default ezmlmrc ... Alter them to suit your
# own ezmlmrc. Removing options from this list makes them unavailable
# through ezmlm-web - this could be useful for things like -w
%EZMLM_LABELS = (
# option => ['Short Name',
# 'Long Help Description'],
a => ['archivieren',
'Ezmlm wird neue Nachrichten zum Archiv hinzufügen'],
b => ['Archiv nur für ModeratorInnen',
'Nur ModeratorInnen haben Zugriff zum Archiv'],
# c => config. This is implicity called, so is not defined here
d => ['Zusammenfassungen',
'Erstelle eine Mailing-Liste, an die regelmäßige Zusammenfassungen versandt werden'],
# e => edit. Also implicity called, so not defined here
f => ['Listenname als Präfix in Betreff einfügen',
'In die versandten Mails wird in der Betreff-Zeile ein Präfix eingefügt'],
g => ['Archiv nur für Mitglieder',
'Nur TeilnehmerInnen der Liste erhalten Zugriff zum Archiv'],
h => ['abonnieren ohne Bestätigung',
'Das Abonnieren der Liste erfordert keine Bestätigung durch die neue AbonnentIn'],
i => ['Web-Index erstellen',
'Den Zugriff auf das Archiv per Webinterface erlauben'],
j => ['abmelden ohne Bestätigung',
'Das Abbestellen der Liste erfordert keine Bestätigung durch die ehemalige AbonnentIn'],
k => ['Beachte Ausschlussliste',
'Einsendungen von Abonnenten, die inm deny-Verzeichnis enthalten sind, werden abgelehnt'],
l => ['Abonnenten-Auflistung für AdministratorInnen',
'Die AdministratorInnen können eine Liste aller AbonnentInnen anfordern'],
m => ['Moderation aktivieren',
'Alle eingehenden Nachrichten müssen durch eine ModeratorIn bestätigt werden'],
n => ['Anpassung der Textbausteine erlauben',
'Administratoren dürfen die Standard-Textbausteine im Unterverzeichnis text/ verändern'],
o => ['Nur ModeratorInnen dürfen einsenden',
'Nur eingehende Nachrichten von den ModeratorInnen werden akzeptiert'],
p => ['Öffentlich',
'Die öffentliche Einschreibung und Archiv-Anforderung ist erlaubt'],
q => ['Verarbeite Anforderungen',
'Mails an liste-request@domain werden verarbeitet'],
r => ['Administration per Mail erlauben',
'Die Verwaltung der Liste durch Mails der AdministratorInnen ist erlaubt'],
s => ['Abonnierung durch ModeratorIn bestätigen',
'Die Einschreibungen in die Liste und die Zusammenfassungs-Liste werden moderiert'],
t => ['Infotext an Mails anhängen',
'An alle ausgehenden Mails wird ein Anhang angefügt'],
u => ['Nur Abonnenten dürfen einsenden',
'Einsendungen von nicht-eingeschriebenen Mail-Adressen werden abgewiesen'],
# v => version. I doubt you will really need this ;-)
w => ['Warnung deaktivieren',
'Entferne den Aufruf von ezmlm-warn aus der Listen-Konfiguration - es wird angenommen, dass ezmlm-warn auf einem anderem Wege gestartet wird'],
x => ['Filtere Anhänge und Kopfzeilen',
'Mails mit den angegebenen Anhangs-Typen werden abgewiesen - die angegebenen Kopfzeilen werden aus den ausgehenden Mails entfernt'],
# y => not used
# z => not used
# These all take an extra argument, which is the default value to use
0 => ['Unterlisten',
'Diese Liste soll eine Unterliste einer anderen Hauptliste sein',
'hauptliste@domain'],
# 1 => not used
# 2 => not used
3 => ['Absender',
'Ersetze den Absender der ausgehenden Mails durch diese Adresse',
'Absender'],
4 => ['Zusammenfassungseinstellungen',
'Einstellungen for ezmlm-tstdig (nach "t" Stunden oder "m" Nachrichten oder "k" Kilobyte',
'-t24 -m30 -k64'],
5 => ['Adresse des Verantwortlichen der Liste',
'Mail-Adresse des Listen-Eigentümers',
'name@domain.org'],
6 => ['SQL-Datenbank',
'SQL-Datenbank-Zugangsinformationen (erfordert SQL-Unterstützung)',
'host:port:user:password:datab:table'],
7 => ['Listen-Moderations-Verzeichnis',
'Falls die Liste moderiert wird, ist der vollständige Verzeichnispfad zur Moderationsdatenbank erforderlich',
'/absoluter/pfad/zur/moderations/datenbank'],
8 => ['Einschreibungs-Moderations-Verzeichnis',
'Falls die Einschreibung in die Liste moderiert wird, ist der vollständige Verzeichnispfad zur Einschreibungs-Moderationsdatenbank erforderlich',
'/absoluter/pfad/zur/abonnenten/moderations/datenbank'],
9 => ['Administrations-Verzeichnis',
'Falls die Liste per Mail administriert wird, ist der vollständige Verzeichnispfad zur Administrationsdatenbank erforderlich',
'/absoluter/pfad/zur/administrations/datenbank'],
);
# This list defines most of the context sensitive help in ezmlm-web. What
# isn't defined here is the options, which are defined above ... You can
# alter these if you feel something else would make more sense to your users
# Just be careful of what can fit on a screen!
%HELPER = (
# These should be self explainitory
addaddress => 'Eine Mail-Adresse - auch in der Form \'Max Meier <max@meier.de>\'',
addaddressfile => 'alternativ ist auch eine Datei mit je einer Adresse pro Zeile möglich',
moderator => 'ModeratorInnen kontrollen, welche Mails weitegeleitet und welche AbonnentInnen akzeptiert werden',
deny => 'Ausschluss: die Mail-Adressen, die NIE an die Liste schreiben dürfen',
allow => 'Zulassung: die Mail-Adressen, die immer an die Liste schreiben dürfen',
digest => 'Zusammenfassung: diese Leute werden regeläßige Zusammenfassungen der Mailingliste erhalten',
webarch => 'Gehe zum Web-Archiv der Mailingliste',
config => 'Einstellungen zur Mailingliste',
listname => 'Dies ist der eindeutige Name der Mailingliste',
listadd => 'Die Adresse der Mailingliste - nur der lokale Teil kann geändert werden',
webusers => 'unfertig: derzeit können Listen-Administratoren nur manuell festgelegt werden',
prefix => 'Präfix der Betreffzeile',
headerremove => 'Diese Kopfzeilen werden aus den ausgehenden Mails entfernt',
headeradd => 'Diese Kopfzeilen werden zu jeder ausgehenden Mail hinzugefügt',
mimeremove => 'Alle Mails, die die genannten Anhangs-Typen beinhalten, werden abgewiesen',
allowedit => 'Komma-getrennte Liste von (existierenden) Nutzern oder <CODE>ALL</CODE>',
mysqlcreate => 'Anlegen der konfigurierten MySQL-Datenbank'
);
# This defines the captions of each of the buttons in ezmlm-web, and allows
# you to configure them for your own language or taste. Since these are used
# by the switching algorithm it is important that every button has a unique
# caption - ie we can't have two 'Edit' buttons doing different things.
%BUTTON = (
# These MUST all be unique!
create => 'Anlegen',
createlist => 'Liste anlegen',
edit => 'Bearbeiten',
delete => 'Entfernen',
deleteaddress => 'Entferne Adresse',
addaddress => 'Füge Adresse hinzu',
moderators => 'ModeratorInnen',
denylist => 'Ausschlussliste',
allowlist => 'Zulassungsliste',
digestsubscribers => 'Abonnenten der Zusammenfassungen',
configuration => 'Konfiguration',
yes => 'Ja',
no => 'Nein',
updateconfiguration => 'Speichere Konfiguration',
edittexts => 'Bearbeite Texte',
editfile => 'Bearbeite Datei',
savefile => 'Speichere Datei',
webarchive => 'Web-Archiv',
selectlist => 'Listenauswahl',
subscribers => 'AbonnentInnen',
cancel => 'Abbruch',
resetform => 'Reset',
);
# This defines the fixed text strings that are used in ezmlm-web. By editing
# these along with the button labels and help texts, you can convert ezmlm-web
# to another language :-) If anyone gets arround to doing complete templates
# for other languages I would appreciate a copy so that I can include it in
# future releases of ezmlm-web.
%LANGUAGE = (
nop => 'Diese Funktionalität ist noch nicht umgesetzt worden',
chooselistinfo => "<UL><LI>Markiere eine Liste in der Auswahlbox oder klicke auf [$BUTTON{'create'}].<LI>Klicke auf den [$BUTTON{'edit'}]-Schalter, falls du die markierte Liste bearbeiten möchtest.<LI>Klicke auf den [$BUTTON{'delete'}]-Schalter, falls du die markierte Liste löschen möchtest.</UL>",
confirmdelete => 'Bestätige die Löschung von ', # list name
subscribersto => 'Abonnenten von', # list name
subscribers => 'Abonnenten',
additionalparts => 'Weitere Listen-Bestandteile',
posting => 'Einsendungen',
subscription => 'Einschreibung',
remoteadmin => 'Entfernte AdministratorIn',
for => 'für', # as in; moderators for blahlist
createnew => 'Lege eine neue Liste an',
listname => 'Name der Liste',
listaddress => 'Adresse der Liste',
listoptions => 'Einstellungen der Liste',
allowedtoedit => 'Nutzer, die diese Liste bearbeiten dürfen',
editconfiguration => 'Einstellungen ändern',
prefix => 'Präfix der Betreff-Zeile ausgehender Nachrichten',
headerremove => 'zu entfernende Kopfzeilen',
headeradd => 'einzufügende Kopfzeilen',
mimeremove => 'abzuweisende Anhangs-Typen',
edittextinfo => "Das Auswahlfeld links enthält die Dateien des <BR>Verzeichnisses DIR/text/. Diese Dateien werden als Antwort auf spezifische Nutzer-Anfragen oder als Teil aller ausgehenden Nachrichten versandt.<P>Um diese Dateien zu verändern, wähle ihren Namen im Auswahlfeld an. Anschlißend klicke auf den [$BUTTON{'editfile'}] Schalter.<P>Betätige [$BUTTON{'cancel'}] um die Veränderung abzubrechen.",
editingfile => 'Bearbeite Datei',
editfileinfo => '<BIG><STRONG>ezmlm-manage</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt;</STRONG></TT> Der Name der Liste<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> Die Anmeldungs-Adresse<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> Die Bestätigungs-Adresse<P><BIG><STRONG>ezmlm-store</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt</STRONG></TT> Der Name der Liste<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> Die Zusage-Adresse<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> Die Ablehungs-Adresse</UL>',
mysqlcreate => 'Lege die MySQL-Datenbank an, falls erforderlich',
);
# === Configuration file ends ===

187
ezmlm-web/trunk/lang/en.pm Normal file
View file

@ -0,0 +1,187 @@
# language-specific definitions for ezmlm-web
# in english
# The meanings of the various ezmlm-make command line switches. The default
# ones match the ezmlm-idx 0.4 default ezmlmrc ... Alter them to suit your
# own ezmlmrc. Removing options from this list makes them unavailable
# through ezmlm-web - this could be useful for things like -w
%EZMLM_LABELS = (
# option => ['Short Name',
# 'Long Help Description'],
a => ['Archived',
'Ezmlm will archive new messages'],
b => ['Block archive',
'Only moderators are allowed to access the archive'],
# c => config. This is implicity called, so is not defined here
d => ['Digest',
'Set up a digest list to disseminate digest of the list messages'],
# e => edit. Also implicity called, so not defined here
f => ['Prefix',
'Outgoing subject will be prefixed with the list name'],
g => ['Guard Archive',
'Archive access requests from unrecognized SENDERs will be rejected'],
h => ['Help subscription',
'Subscriptions do not require confirmation'],
i => ['Indexed',
'Indexed for WWW archive access'],
j => ['Jump off',
'Unsubscribe does not require confirmation'],
k => ['Kill',
'Posts from addresses in dir/deny/ are rejected'],
l => ['Subscriber List',
'Remote administrators can request a subscriber list'],
m => ['Message Moderation',
'All incoming messages are moderated'],
n => ['Text Editing',
'Allow remote administrators to edit files in dir/text/'],
o => ['Others rejected',
'Posts from addresses other than moderators are rejected'],
p => ['Public',
'List will respond to administrative requests and archive retrieval'],
q => ['Service Request Address',
'Process commands sent in the subject to local-request@host'],
r => ['Remote Admin',
'Enable remote adminstration of the list'],
s => ['Subscription Moderation',
'Subscriptions to the main list and digest will be moderated'],
t => ['Trailer',
'Add a trailer to outgoing messages'],
u => ['User Posts Only',
'Posts from unrecognized SENDER addresses will be rejected'],
# v => version. I doubt you will really need this ;-)
w => ['Remove Warn',
'Remove the ezmlm-warn(1) invocations from the list setup. It is assumed that ezmlm-warn(1) is run by other means'],
x => ['Extra',
'Strip certain mimetypes, etc'],
# y => not used
# z => not used
# These all take an extra argument, which is the default value to use
0 => ['Sublist',
'Make the list a sublist of list mainlist@host',
'mainlist@host'],
# 1 => not used
# 2 => not used
3 => ['From Address',
'Replace the &quot;From:&quot; header of the message with &quot;From: fromarg&quot;',
'fromarg'],
4 => ['Digest Options',
'Switches for ezmlm-tstdig(1)',
'-t24 -m30 -k64'],
5 => ['List Owner',
'The email address of the list owner',
''],
6 => ['SQL Database',
'SQL database connect information. Requires SQL support',
'host:port:user:password:datab:table'],
7 => ['Message Moderation Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path'],
8 => ['Subscription Moderation Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path'],
9 => ['Remote Admin Path',
'Make /path the path to the database for message moderators, if the list is set up for message moderation',
'/some/full/path']
);
# This list defines most of the context sensitive help in ezmlm-web. What
# isn't defined here is the options, which are defined above ... You can
# alter these if you feel something else would make more sense to your users
# Just be careful of what can fit on a screen!
%HELPER = (
# These should be self explainitory
addaddress => 'You may enter any RFC822 compliant email address here, including the comment part. For example; J Random User <jru@on.web.za>',
addaddressfile => 'or you may enter the filename of a plain text file containing multiple RFC822 email addresses, one per line',
moderator => 'Moderators: people who control who may subscribe or post to a list',
deny => 'Deny: A list of addresses that are _never_ allowed to mail the list',
allow => 'Allow: A list of address that are allowed to mail the list even if the configuration otherwise restricts it',
digest => 'Digest: People who will recieve a digest of all messages on the list',
webarch => 'View the web based archive of this list',
config => 'This lets you alter the way the list is set up',
listname => 'This is the name of the list as displayed on the Select Lists screen. It is also the name of the subdirectory that contains the list',
listadd => 'This is the email address of the list. Note that the defaults come from your qmail config. You should just update the local part (before the @)',
webusers => 'NB! At this stage, any users specified here must exist. User creation may be added in future versions',
prefix => 'Text to add to the subject line of all outgoing messages',
headerremove => 'This is a list of headers to remove from all outgoing mail',
headeradd => 'This is a list of headers to add to all outging mail',
mimeremove => 'All messages whose Content-Type matches these mime types will be bounced back to sender',
allowedit => 'Comma separated list of usernames, or <CODE>ALL</CODE> (all valid users)',
mysqlcreate => 'This will create the necessary MySQL tables if the list configuration above requires it'
);
# This defines the captions of each of the buttons in ezmlm-web, and allows
# you to configure them for your own language or taste. Since these are used
# by the switching algorithm it is important that every button has a unique
# caption - ie we can't have two 'Edit' buttons doing different things.
%BUTTON = (
# These MUST all be unique!
create => 'Create',
createlist => 'Create List',
edit => 'Edit',
delete => 'Delete',
deleteaddress => 'Delete Address',
addaddress => 'Add Address',
moderators => 'Moderators',
denylist => 'Deny List',
allowlist => 'Allow List',
digestsubscribers => 'Digest Subscribers',
configuration => 'Configuration',
yes => 'Yes',
no => 'No',
updateconfiguration => 'Update Configuration',
edittexts => 'Edit Texts',
editfile => 'Edit File',
savefile => 'Save File',
webarchive => 'Web Archive',
selectlist => 'Select List',
subscribers => 'Subscribers',
cancel => 'Cancel',
resetform => 'Reset Form',
);
# This defines the fixed text strings that are used in ezmlm-web. By editing
# these along with the button labels and help texts, you can convert ezmlm-web
# to another language :-) If anyone gets arround to doing complete templates
# for other languages I would appreciate a copy so that I can include it in
# future releases of ezmlm-web.
%LANGUAGE = (
nop => 'Action not yet implemented',
chooselistinfo => "<UL><LI>Choose a mailing list from the selection box or click on [$BUTTON{'create'}].<LI>Click on the [$BUTTON{'edit'}] button if you want to edit the selected list.<LI>Click on the [$BUTTON{'delete'}] button if you want to delete the selected list.</UL>",
confirmdelete => 'Confirm deletion of', # list name
subscribersto => 'Subscribers to', # list name
subscribers => 'subscribers',
additionalparts => 'Additional list parts',
posting => 'Posting',
subscription => 'Subscription',
remoteadmin => 'Remote Admin',
for => 'for', # as in; moderators for blahlist
createnew => 'Create a New List',
listname => 'List Name',
listaddress => 'List Address',
listoptions => 'List Options',
allowedtoedit => 'Users allowed to edit this list',
editconfiguration => 'Edit the List Configuration',
prefix => 'Subject prefex for outgoing messages',
headerremove => 'Headers to strip from all outgoing mail',
headeradd => 'Headers to add to all outgoing mail',
mimeremove => 'Mime types to strip from all outgoing mail',
edittextinfo => "The box on the left contains a list of files available in the<BR>DIR/text directory. These files are sent out in response to specfic user request, or as part of all outgoing messages<P>To edit a file, select its name from the box. Then click on the [$BUTTON{'editfile'}] button.<P>Press [$BUTTON{'cancel'}] when you have finished editing.",
editingfile => 'Editing File',
editfileinfo => '<BIG><STRONG>ezmlm-manage</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt;</STRONG></TT> The list name<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> The subscription address<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> The address a subscriber must reply to<P><BIG><STRONG>ezmlm-store</STRONG></BIG><BR><TT><STRONG>&lt;#l#&gt;</STRONG></TT> The list name<BR><TT><STRONG>&lt;#A#&gt;</STRONG></TT> The acceptance address<BR><TT><STRONG>&lt;#R#&gt;</STRONG></TT> The rejection address</UL>',
mysqlcreate => 'Create the MySQL database tables if necessary',
);
# === Configuration file ends ===

View file

@ -0,0 +1,5 @@
comm: guy, arb
users: arb
members: ALL
ALL: root
ALLOW_CREATE: root, guy

View file

@ -0,0 +1,186 @@
body {
margin: 0;
padding: 0;
font: normal 100% sans-serif;
color: #606760;
}
font.ez {
font-style: italic;
color: #505050;
}
font.hint {
font-size: 85%;
}
font.feature {
#font-size: 110%;
font-weight: bold;
}
#nav-bar {
float: left;
width: 14%;
margin: 0.5%;
padding-bottom: 1%;
background-color: #c0c0b0;
}
.nav-group {
margin-top: 1%;
padding-bottom: 1%;
}
#nav-bar ul {
list-style: square;
color: #af8060;
margin: 0;
padding-left: 20px;
}
#nav-bar li {
margin-top: 0;
border-bottom: solid 1px #606070;
}
#nav-bar a {
font: bold 85% sans-serif;
color: #2f4860;
text-decoration: none;
}
#nav-bar a:hover {
background-color: #d8d8d8;
color: #2f4860;
}
#news {
background: #e8947c;
color: #000000;
margin: 1%;
padding: 5px;
width: 30%;
float: right;
font-size: 80%;
}
#news font.title {
font-style: italic;
font-size: 110%;
}
#news ul.changes {
font-size: 90%;
margin-top: 0px;
}
a:visited {
color: #005040;
}
#oben {
background-color: #2f4860;
}
h1.oben {
text-align: left;
border-bottom: solid 2px #ffffff;
padding: 5px;
font-weight: bold;
letter-spacing: -1px;
color: #ffffff;
margin: 0;
}
#perm-nav {
float: right;
padding-right: 5px;
font-size: 100%;
color: #006760;
background-color: inherit;
}
#perm-nav a {
font-weight: bold;
color: #ffffff;
padding-left: 2px;
padding-right: 2px;
text-decoration: none;
}
#perm-nav a:hover {
color: #ffcc00;
}
.lid {
margin: 0;
padding: 3px;
padding-left: 10px;
border-bottom: solid 1px #606070;
background-color: #c0c0b0;
font: bold 100% sans-serif;
letter-spacing: -1px;
color: #ffffff;
}
#content {
# position: absolute;
# right: 0px;
# width: 85%;
font: normal 82% sans-serif;
background-color: #ffffff;
padding: 2px;
}
#content h2 {
margin: 5px;
margin-top: 10px;
margin-left: 0;
font-weight: normal;
letter-spacing: -1px;
color: #2f4860;
}
.push {
margin: 5px;
padding: 0;
}
.push p {
text-align: justify;
}
#info-title {
text-align: center;
background-color: #c0c0b0;
margin: 0.5%;
color: #ffffff;
font-size: 105%;
#font-weight: bold;
}
#header {
text-align: right;
background-color: #2f4860;
font-size: 90%;
color: #ffffff;
margin: 0;
}
#footer {
text-align: right;
background-color: #2f4860;
font-size: 90%;
color: #ffffff;
margin: 0;
}
#footer a:visited {
color: #a0d0b0;
}
.mail {
font-style: italic;
color: #2f4860;
}

View file

@ -0,0 +1,191 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="ezmlm-web.css" type="text/css" rel="stylesheet">
<meta name="description" content="ezmlm-web ezmlm web interface administration mailing lists mailinglists access control acl" />
<title>ezmlm-web - administration interface for ezmlm</title>
</head>
<body>
<div id="container">
<div id="oben">
<div id="perm-nav"><a href="https://systemausfall.org">systemausfall.org</a></div>
<h1 class="oben">ezmlm-web</h1>
</div>
<div id="nav-bar">
<div class="nav-group">
<div class="lid">ezmlm-web</div>
<ul>
<li><a href="download/">download</a></li>
<li><a href="http://rucus.ru.ac.za/~guy/ezmlm/">original project</a></li>
</ul>
</div>
<div class="nav-group">
<div class="lid">ezmlm</div>
<ul>
<li><a href="http://ezmlm.org">ezmlm website</a></li>
<li><a href="http://www.de.ezmlm.org/ezmlm/archive/">ezmlm mailing list archive</a></li>
</ul>
</div>
<div class="nav-group">
<div class="lid">qmail</div>
<ul>
<li><a href="http://cr.yp.to/qmail.html">DJB's qmail</a></li>
<li><a href="http://www.lifewithqmail.org/">life with qmail</a></li>
</ul>
</div>
</div>
<div id="info-title">a web interface for mailing lists' administration</div>
<div id="content">
<div id="news">
<font class="title">02005/01/26 - <font class="ez">ezmlm-web</font> <a href="download/ezmlm-web-2.2.tar.gz" title="download ezmlm-web 2.2">Version 2.2 released</a></font>
<ul class="changes">
<li>german translation</li>
<li>security fixes</li>
<li>create-permissions per user</li>
</ul>
<font class="title">02005/01/24 - the work of <a href="http://rucus.ru.ac.za/~guy/ezmlm/">Guy Antony Halse</a> will be continued ... here</font>
</div>
<div class="push">
<h2>Overview</h2>
<p><font class="ez">ezmlm-web</font> is a web interface for the administration of <a href="http://ezmlm.org">ezmlm</a> mailing lists. It allows complete control over their configuration by using a web browser. User-based access control relieves administrators from the burden of managing all their mailing lists on their own.</p>
</div>
<div class="push">
<h2>History</h2>
The original author of <font class="ez">ezmlm-web</font> is Guy Antony Halse. He maintained it up to version 2.1. By then it was functionally complete and convenient.</p>
<p>Since September 02000 no new releases were published.</p>
<p>In January 02005 Guy allowed me to continue the project. I will try to incorporate the suggestions that were send to Guy so far. Additional security improvements and translations will be integrated.</p>
<p>Your suggestions are welcome and will improve <font class="ez">ezmlm-web</font> whenever possible.</p>
</div>
<div class="push">
<h2>How can <font class="ez">ezmlm-web</font> help you?</h2>
<p><font class="ez"><a href="http://www.ezmlm.org">ezmlm</a></font> uses a mainly
command line interface for the creation and maintainence
of mailing lists. While this is very convenient for the average systems
administrator who is used to such interfaces, it restrains him from transferring
administrative work to users who want to manage a community on their own.</p>
<p><font class="ez">ezmlm-web</font> is an attempt to hide the complexities of managing a mailing list
behind and intuative, easy to use web based interface. The idea behind this
is threefold. Firstly just about everyone these days can use a web browser,
or can learn very quickly. Secondly it provides almost complete platform
independence on the client side - there are GUI web browsers available for
every major modern operating system. Thirdly, and perhaps more importantly,
it makes easy remote administration a real possibility.</p>
<p><font class="ez">ezmlm-web</font> allows the user to easily add and remove
mailing list subscribers, create and delete mailing lists as well as alter
the configuration of existing mailing lists. Almost every aspect of the
mailing list is controlable through the web front end, allowing the list
user to do most things without the assistance of the systems administrators.</p>
</div>
<div class="push">
<h2>Features</h2>
Some of the important features that <font class="ez">ezmlm-web</font> offers are;
<ul>
<li><font class="feature">Full Virtual Host Support</font>
- <font class="hint"><font class="ez">ezmlm-web</font> hides the complexities of setting up virtually hosted mailing lists from your users.</font></li>
<li><font class="feature">Multi-Level Access</font>
- <font class="hint">You can control who has access to different mailing lists.</font></li>
<li><font class="feature">Name Association</font>
- <font class="hint">You can enter any RFC 822 email address, and it will display the nice name while refering to the email address.</font></li>
<li><font class="feature">Configurable Interface</font>
- <font class="hint">Most of the &quot;look & feel&quot; of <font class="ez">ezmlm-web</font> is configured through templates, allowing you to easily co-ordinate it with your existing website.</font></li>
<li><font class="feature">Language Independence</font>
- <font class="hint"><font class="ez">ezmlm-web</font> can be easily reconfigured for different locales and languages. For now you can only choose between english and german - your contribution for other languages is welcome.</font></li>
<li><font class="feature">Context Sensitive Help</font>
- <font class="hint">Context sensitive help is provided throughout <font class="ez">ezmlm-web</font> in the form of image <tt>TITLE</tt> tags, which serve as tooltips.</font></li>
<li><font class="feature">Full support for all command line options</font>
- <font class="hint"><font class="ez">ezmlm-web</font> has been updated to take advantage of all the command line features of ezmlm-idx 0.40. And should be compatible with any further releases :-)</font></li>
<li><font class="feature">Browser Independence</font>
- <font class="hint"><font class="ez">ezmlm-web</font> has been tested with <a href="http://mozilla.org">Mozilla</a> 1.73, <a href="http://mozilla.org">Firefox</a> 1.0, <a href="http://www.netscape.com/">Netscape Navigator</a> 4.7, <a href="http://lynx.browser.org/">Lynx</a> 2.8.3, <a href="http://ei5nazha.yz.yamagata-u.ac.jp/~aito/w3m/eng">w3m</a> 0.1.11-pre and <a href="http://www.microsoft.com">Internet Explorer</a> 5.0</font></li>
<li><font class="feature">Platform Independence</font>
- <font class="hint"><font class="ez">ezmlm-web</font> should run on any platform that can run <a href="http://www.ezmlm.org/">ezmlm</a> and <a href="http://www.perl.org/">Perl</a></font></li>
<li><font class="feature">Multiple Subscribes/Unsubscribes</font>
- <font class="hint"><font class="ez">ezmlm-web</font> supports file uploads for bulk subscription of email addresses, and multiple selects for bulk deletes.</font> <img src="new.gif" alt="New!"></li>
</ul>
</div>
<div class="push">
<h2>Requirements</h2>
<p> A full list of requirements is available in the <A HREF="http://rucus.ru.ac.za/~guy/ezmlm/ezmlm-web-2.1/README">README</A>
file in the distribution.</p>
<p>Basically, however, you require the following on your
system:
<ul>
<li><a href="http://www.qmail.org">Qmail</a></li>
<li><a href="http://www.ezmlm.org">ezmlm</a</li>
<li><a href="http://www.perl.org">Perl 5</a></li>
<li>+ a few <a href="http://www.cpan.org">perl modules</a> <font class="hint">(including the <a href="http://rucus.ru.ac.za/~guy/ezmlm/#Mail::Ezmlm">Mail::Ezmlm</A> module from the author of <font class="ez">ezmlm-web</font>)</font</li>
<li>and a webserver such as <a href="http://www.apache.org">Apache</a>
</ul></p>
</div>
<div class="push">
<h2>How you can contribute</h2>
<p>You can help to improve <font class="ez">ezmlm-web</font> in many ways. Some of them are:
<ul>
<li>translate it to another language (this takes about an hour) - for now english and german are available</li>
<li>create a nice stylesheet to improve its appearance</li>
<li>send me patches you would like to see incorporated</li>
<li>tell me if you find evidences of my poor english tongue on this page</li>
</ul>
If you are interested in the development code of <font class="ez">ezmlm-web</font>, then you may anonymously checkout the subversion repository at <a href="https://svn.systemausfall.org/svn/admin-tools/ezmlm-web">https://svn.systemausfall.org/svn/admin-tools/ezmlm-web</a>.
</div>
<div class="push">
<h2>Some final words ...</h2>
<p>As I am no native english speaker, I will gladly accept every hint to improve the appearance of this website.</p>
<p>Nearly every line of <font class="ez">ezmlm-web</font> was written by <a href="http://rucus.ru.ac.za/~guy/ezmlm/">Guy Antony Halse</a> - thanks a lot for this work!</p>
<p>If you have any suggestions regarding <font class="ez">ezmlm-web</font>, please send a mail to <font class="mail">ezmlm-web[AT]sumpfralle.de</font>.</p>
</div> <!-- content -->
<div id="footer">ezmlm-web was developed by <a href="http://rucus.ru.ac.za/~guy/ezmlm/">Guy Antony Halse</a></div>
</div>
</body>
</html>