updated changelog date

removed TODO file from release
tagged the v3.2 release
This commit is contained in:
lars 2007-08-15 17:39:45 +00:00
parent 4954a16acf
commit 3c02ffac2f
156 changed files with 30931 additions and 0 deletions

176
ezmlm-web-3.2/INSTALL Normal file
View file

@ -0,0 +1,176 @@
The following notes will guide you through the installation of ezmlm-web:
$Id$
OVERVIEW:
0 - important notes
1 - get it
2 - install executable and shared files
3 - configuration file
4 - create a suid cgi wrapper
5 - [optional] configure access control (http authentication)
6 - [optional] configure multi domain support
7 - css stylesheet file
8 - final test
9 - troubleshooting
10 - report problems
------------------------------------------------------------------------------
0. IMPORTANT: you need the perl module Mail::Ezmlm and others to use
ezmlm-web! The file README contains the complete list of necessary
modules.
1. Choose a distribution form
1a) source installation
Get ezmlm-web and extract the archive:
tar xzf ezmlm-web-3.x.tar.gz
(for source installation continue with step 2)
1b) debian package
This is the (by far) most convenient way to install ezmlm-web.
Read debian/README.Debian for details.
(debian users may stop reading here)
2. Execute the following lines to install the cgi script and the shared data
files to the appropriate locations.
perl Makefile.PL
make
make install
3. Edit the examples/ezmlmwebrc.dist file and alter the variables to suit
your particular system.
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 to one of
the following places:
1) the home directory of the user that runs ezmlm-web.cgi (~/.ezmlmwebrc)
2) /etc/ezmlm-web/ezmlmwebrc
3) /etc/ezmlm/ezmlmwebrc [deprecated]
(ezmlm-web will look for it in these places in the given order)
See the manpage of ezmlmwebrc (5) for a complete description of all
configuration settings.
4. For every user/virtual host that needs to manage mailing lists, you
need to create a suid wrapper owned by the user whom the mailing lists
belong to. This wrapper needs to reside somewhere accessible by
the web server. I suggest that you put it in a sub directory
of each user/virtual host's home directory (eg.
/home/luser/public_html/ezmlm for Apache).
Create a suid wrapper by issuing the following command:
ezmlm-web-make-suid
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. 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 for Apache).
Alternatively you can also manage multiple domains/users/virtual hosts
with a single suid-wrapper. Take a look at examples/multidomain.conf for
details.
5. 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).
5.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)
5.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.
5.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
You may use examples/htaccess.dist as a template.
Again, see the ApacheWeek article for details.
6. You may skip this step if you manage only one directory containing mailing
lists. For more than one domain or multiple user directories you should
follow the instructions below. BEWARE: this is an advanced setting.
1) copy examples/multidomain.conf.dist to /etc/ezmlm-web/multidomain.conf
2) add your mailing list parent directories to this file
3) uncomment the respective line in your ezmlmwebrc file
The web interface should now show a "Change domain" link in the navigation
bar to the left.
Direct links to a specifc domain use the following format:
http://BASE_URL/ezmlm-web?domain=foo
7. Copy the stylesheet files (/usr/local/share/ezmlm-web/www-data/*.css)
to a location of your choice. It has to be accessible by an URL - maybe
a place like "/var/www/ezmlm-web/" could be appropriate.
Now you may have to adapt the "HTML_CSS_COMMON" and "HTML_CSS_COLOR"
settings in your ezmlmwebrc file.
Alternatively you can also use the mapping feature of your web server.
Take a look at examples/apache.conf.dist for an example.
8. Test the installation with your favourite web browser. You should be
asked for a username and password (supplied in 6.2) and then be presented
with a screen entitled "ezmlm-web". You can then try to create and edit
mailing lists ... Have Fun :)
If you see a slightly disordered screen, the you probably did not set the
HTML_CSS_COMMON option correctly. Check it again.
If you do not see a colorful screen, then you probably did not set the
HTML_CSS_COLOR option correctly. Check it again.
9. If anything failes - take a look at the web server's error log
(e.g. /var/log/apache/error.log).
10. If the error log of your web server does not to solve your problem:
- take a look at https://systemausfall.org/toolforge/ezmlm-web
- subscribe to the mailinglist: ezmlm-web-subscribe@lists.systemausfall.org
- send me an email: ezmlm-web@sumpfralle.de
- report a bug at https://systemausfall.org/trac/ezmlm-web

9
ezmlm-web-3.2/MANIFEST Normal file
View file

@ -0,0 +1,9 @@
ezmlm-web.cgi
changelog
copyright
UPGRADING
template/
www-data/
man/
examples/
suid-wrapper/

110
ezmlm-web-3.2/Makefile.PL Normal file
View file

@ -0,0 +1,110 @@
# $Id$
use strict;
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
'NAME' => 'ezmlm-web',
'AUTHOR' => 'Lars Kruse <devel@sumpfralle.de>',
'VERSION_FROM' => 'ezmlm-web.cgi', # finds $VERSION
'DISTNAME' => 'ezmlm-web',
'PREREQ_PM' => {
'Mail::Ezmlm' => 0.07,
'Mail::Address' => 1.15,
'CGI' => 2.6,
'CGI::Carp' => 1.06,
'DB_File' => 1.65,
'Getopt::Std' => 1.0,
'File::Find' => 0.0,
'File::Copy' => 2.02,
'File::Path' => 1.07,
'Text::ParseWords' => 3.0 },
'MAN1PODS' => { 'ezmlm-web.cgi' => 'blib/man1/ezmlm-web.cgi.1p' },
'dist' => { COMPRESS => 'gzip', SUFFIX => 'gz' }
);
sub MY::postamble {
my ($self, $datadir) = @_;
my $SHAREDIR = "\$(DESTINSTALLSHARE)/$self->{NAME}";
return <<ENDOFTEXT
# REALINSTALLBIN is introduced later depending on "site" or "vendor" installation
export REALINSTALLBIN
export NOECHO
export CC
real_install_bin_: REALINSTALLBIN := \$(INSTALLSITEBIN)
real_install_bin_: install_suid_wrapper install_cgi
real_install_bin_site: REALINSTALLBIN := \$(INSTALLSITEBIN)
real_install_bin_site: install_suid_wrapper install_cgi
real_install_bin_vendor: REALINSTALLBIN := \$(INSTALLVENDORBIN)
real_install_bin_vendor: install_suid_wrapper install_cgi
real_install_bin_perl: REALINSTALLBIN := \$(INSTALLBIN)
real_install_bin_perl: install_suid_wrapper install_cgi
real_build_bin_: REALINSTALLBIN := \$(INSTALLSITEBIN)
real_build_bin_: build_suid_wrapper
real_build_bin_site: REALINSTALLBIN := \$(INSTALLSITEBIN)
real_build_bin_site: build_suid_wrapper
real_build_bin_vendor: REALINSTALLBIN := \$(INSTALLVENDORBIN)
real_build_bin_vendor: build_suid_wrapper
real_build_bin_perl: REALINSTALLBIN := \$(INSTALLBIN)
real_build_bin_perl: build_suid_wrapper
subdirs:: real_build_bin_\$(INSTALLDIRS)
clean_subdirs: clean_suid_wrapper
build_suid_wrapper:
\$(MAKE) -C suid-wrapper build
clean_suid_wrapper:
\$(MAKE) -C suid-wrapper clean
make_real_bin: real_install_bin_\$(INSTALLDIRS)
\$(MKPATH) \$(DESTDIR)\$(REALINSTALLBIN)
install_cgi: make_real_bin
install -c -m 755 ezmlm-web.cgi \$(DESTDIR)\$(REALINSTALLBIN)/ezmlm-web.cgi
install_suid_wrapper: build_suid_wrapper make_real_bin
\$(NOECHO) echo "WARNING: \$(REALINSTALLBIN)"
install -c -m 0755 suid-wrapper/index.cgi \$(DESTDIR)\$(REALINSTALLBIN)/ezmlm-web.wrapper
install -c -m 0755 suid-wrapper/ezmlm-web-make-suid.configured \$(DESTDIR)\$(REALINSTALLBIN)/ezmlm-web-make-suid
install:: real_install_bin_\$(INSTALLDIRS) install_share_\$(INSTALLDIRS)
install_share_site:: DESTINSTALLSHARE := \$(DESTDIR)\$(PREFIX)/local/share
install_share_site:: install_share
install_share_vendor:: DESTINSTALLSHARE := \$(DESTDIR)\$(PREFIX)/share
install_share_vendor:: install_share
install_share:
install -d -m 0755 $SHAREDIR
install -d -m 0755 $SHAREDIR/lang
for file in lang/*.hdf ; \\
do install -c -m 0644 \$\$file $SHAREDIR/lang/ ; \\
done
install -d -m 0755 $SHAREDIR/www-data
for file in www-data/*.css www-data/*.png ; \\
do install -c -m 0644 \$\$file $SHAREDIR/www-data/ ; \\
done
install -d -m 0755 $SHAREDIR/template
install -d -m 0755 $SHAREDIR/template/config_options
install -d -m 0755 $SHAREDIR/template/ui
for file in template/*.cs template/*.txt ; \\
do install -c -m 0644 \$\$file $SHAREDIR/template/ ; \\
done
for file in template/config_options/*.cs ; \\
do install -c -m 0644 \$\$file $SHAREDIR/template/config_options/ ; \\
done
for file in template/ui/*.hdf ; \\
do install -c -m 0644 \$\$file $SHAREDIR/template/ui/ ; \\
done
ENDOFTEXT
}

214
ezmlm-web-3.2/README Normal file
View file

@ -0,0 +1,214 @@
=================
| ezmlm-web-3.2 |
=================
$Id$
If you only want to know how to install ezmlm-web, then you should
read INSTALL.
Contents
========
I. Copyright Stuff
II. Requirements
III. Multi-level list access
IV. Multilingual interface
V. Bugs && Bug Reports
VI. Acknowledgements
VII. Availability
I. Copyright Stuff - essentially the FreeBSD licence ...
==================
ezmlm-web - version 3.2 - 04/14/02006
Copyright (C) 1998, Guy Antony Halse, All Rights Reserved.
Copyright (C) 02005-02007, Lars Kruse, All Rights Reserved.
Please send bug reports and comments to ezmlm-web@sumpfralle.de
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. Requirements
================
This version of ezmlm-web requires the following;
* qmail v1.03
* ezmlm-idx v0.40 or higher
* clearsilver v0.10.3 (only perl support is necessary)
* Perl v5.004 and the following modules;
+ Mail::Ezmlm v0.07
+ Mail::Address v1.15 OR Email::Address
+ CGI v2.6
+ CGI::Carp v1.06
+ DB_File v1.65
+ Getopt::Std v4.1
+ File::Find v?
+ File::Copy v2.02
+ File::Path v1.07
+ Text::ParseWords v3.24
+ Encode (optional)
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. Of course, newer
versions are expected to work as well.
To install perl modules you may use the cpan command line interface.
Just run "cpan" and type something like "install Mail::Ezmlm".
You can download clearsilver (a templating engine) from http://clearsilver.net.
III. 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 (user) 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. There is no way to create users
through the web interface, as this depends on your authentication system.
The format of a webusers file is as follows:
list1: user1 user2 user3
ALL: user1 user2
list2: ALL
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.
You find the details of the format of webusers (5) file in the respective
manpage.
IV. Multilingual interface
=======================
One of the great new features since version 2.0 is that it is essentially
language independant. All of the fixed strings, help, etc is defined in the
files of the lang directory. Of course you can change them or create a new
translation.
The default fallback language can be selected in ezmlmwebrc with the
"HTML_LANGUAGE" option. ezmlm-web tries to determine the language of the
current user by evaluating the http header information of the browser.
Additionally the user may select a different language via the web interface.
The currently supported languages are:
- English
- German
- Slovenian
- Portuguese (Brazil)
Please visit the translation center at http://translate.systemausfall.org
to contribute some translations for your native language. Thanks!
V. Bugs && Bug Reports
======================
I don't know of any bugs ...
Ezmlm-web has been tested reasonably well, but not exhaustively. I know it
works on FreeBSD 4.0-STABLE, FreeBSD 3.4-RELEASE, RedHat 5.1, Redhat 6.0 and
Debian all using an Apache web server, but I would be interested to know
whether it works on other OSs and with other web servers.
Please mail bug reports and comments to
ezmlm-web@sumpfralle.de
Or (even better) submit a bug report at
https://systemausfall.org/trac/ezmlm-web
Or subscribe to the ezmlm-web mailinglist:
ezmlm-web-subscribe@lists.systemausfall.org
VI. Acknowledgements
====================
* Guy Antony Halse (guy-ezmlm@rucus.ru.ac.za) - he created ezmlm-web
and maintained it till 02005
* Keith Burdis (keith@rucus.ru.ac.za) - For constantly bugging me (Guy) 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 (Guy)
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 (Guy) 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.
* Reinin Ooyama (lenin@hasiru.net) - a Japanese translation and bugixes for v2.3
* Henning Rieger (age@systemausfall.org) - designed most of the new
interface for v3.0
* Clavdia Horvat - designed the new color scheme of v3.2 and translated to
Slovenian
* Carlinhos Cecconi - added the translation for Portugues do Brasil
VII. Availability
=================
More information on ezmlm-web and developments to ezmlm-web can be found at:
https://systemausfall.org/toolforge/ezmlm-web/
The public subversion repository is at:
https://svn.systemausfall.org/svn/ezmlm-web/
The (inofficial) debian repository containing ezmlm-web is at:
http://systemausfall.org/toolforge/debian/
The website of Guy Antony Halse (the original 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,62 @@
This file describes how to manage encrypted mailing lists with ezmlm-web.
$Id$
Content:
1) Requirements
2) Installation of gpgpy-ezmlm
3) Setup of ezmlm-web
4) Notes
------------------------------
1) Requirements
To use encrypted mailing lists, you need to install gpg-ezmlm (see
http://www.synacklabs.net/projects/crypt-ml/). It is essential to use
at least version 0.3.4.
gpg-ezmlm will handle your incoming and outgoing mails. It does not
support all the features of ezmlm-idx, but it should suffice for the
specialized needs of encrypted communication for small groups.
Install the perl module Mail::Ezmlm::Gpg to access gpg-ezmlm. You can
downloaded it from
https://systemausfall.org/toolforge/ezmlm-web/downloads/Ezmlm-Gpg.
Of course, you also need gnupg (it is required by gpg-ezmlm, too).
2) Installation
Follow the instructions in the README file of gpg-ezmlm.
Usually it should boil down to the following commands:
perl Makefile.PL
make
make test
make install
See INSTALL in the Mail::Ezmlm::Gpg module
(https://systemausfall.org/toolforge/ezmlm-web/downloads/Ezmlm-Gpg)
for details on how to install it.
3) Setup of ezmlm-web
Support for encrypted mailing lists can be turned on by copying the
template configuration file (examples/ezmlmwebrc.gnupg.dist) to
the directory, where you did put your ezmlmwebrc file (omit the ".dist"
suffix).
ezmlm-web will just check, if a file suffixed with ".gnupg" exists
besides ezmlmwebrc.
To support encrypted mailing lists, the following lines in your
ezmlmwebrc.gnupg file are necessary:
use Mail::Ezmlm::Gpg;
GPG_SUPPRT = yes;
The documented example of the ezmlmwebrc.gnupg file in the examples
directory is helpful.
4) Notes
As soon as you installed all the necessary programs and after you did put
the ezmlmwebrc.gnupg to the right location, you will find a new link in the
navigation bar of ezmlm-web named "Encryption".

11
ezmlm-web-3.2/TODO Normal file
View file

@ -0,0 +1,11 @@
add translators to "contribute"
check the content of the Log file for automatic subscription
Infos fuer Massen-Hosting:
http://www.fbis.ch/index-de.php?page=14&frameset=4
add "only for plain text mails" to the TrailerText string
check version history of Mail::Ezmlm

107
ezmlm-web-3.2/UPGRADING Normal file
View file

@ -0,0 +1,107 @@
This file contains some useful hints for upgrading from a previous version.
##############################################################################
UPGRADING ezmlm-web 3.1 to ezmlm-web 3.2
1) the following dependency was added:
- File::Path
2) CSS stylesheet file
The css stylesheet file changed significantly. Please update your copy.
Additionally the stylesheet file was splitted into a common and a color
scheme part. Thus you need to specify the location of your color scheme
CSS file (a URL) in your ezmlmwebrc as HTML_CSS_COLOR. Otherwise your web
interface will be plain black and white. Read 'man ezmlmwebrc' for details.
Be aware that at least one of the supplied color schemes requires some
images to be available in the directory of the stylesheet file.
The easiest approach would be to publish the 'www-data' directory via an
'Alias' (or something similar) with your favourite web server.
Take a look at examples/apache.conf.dist for an example.
3) possible locations of ezmlmwebrc
ezmlm-web does no longer search for a configuration file (ezmlmwebrc) in
the current directory, as this can be a security risk.
If you relied on this behavior (should be rare), then you have two options:
A) move your configuration file to one of the other possible locations
B) patch the source of ezmlm-web.cgi to include the deprecated
configuration file location. Do this on your own risk!
4) renamed configuration setting
The configuration setting 'HTML_CSS_FILE' is replaced by 'HTML_CSS_COMMON'
for clarity. 'HTML_CSS_COMMON' falls back to the value of 'HTML_CSS_FILE'
if it is undefined. Thus your setup should work as before. But you are
encouraged to replace the setting, as it might break your setup in a
future version of ezmlm-web.
------------------------------------------------------------------------------
UPGRADING ezmlm-web 3.0 to ezmlm-web 3.1
1) update the perl module Mail::Ezmlm to v0.07
------------------------------------------------------------------------------
UPGRADING ezmlm-web 2.3 to ezmlm-web 3.0
1) install clearsilver (see INSTALL for details)
2) copy the "template" directory somewhere (see INSTALL again)
3) set "TEMPLATE_DIR" in your ezmlmwebrc file to this directory
4) copy the languge directory somewhere and adjust the "LANGUAGE_DIR" setting
4) maybe you want to define "MAIL_DOMAIN" in your ezmlmwebrc
5) the search order for ezmlmwebrc has changed
from HOME -> SYSTEM -> CGI_DIR
to HOME -> CGI_DIR -> SYSTEM
------------------------------------------------------------------------------
UPGRADING ezmlm-web 2.2 to ezmlm-web 2.3
1) set the location (URL) of the css file in ezmlmwebrc
------------------------------------------------------------------------------
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.

159
ezmlm-web-3.2/changelog Normal file
View file

@ -0,0 +1,159 @@
Version 3.2 - 08/15/02007
* support for multi-domain setups (multiple list directories)
* detect preferred interface language
* user-specific interface language selection
* user-specific interface types (easy/normal/expert)
* simplified rules for subscribing, posting and archive access
* support for listing of subscription log
* support for downloading the subscribers list as a text file
* configurable prefix for the local part of mailing list addresses
* support for more ezmlm-idx features: 'headerkeep', 'mimekeep' and 'copylines'
* "reply-to-self" is easier to use
* added configuration setting for site-specific links
* script for creating binary suid wrappers added
* handling of empty settings for ezmlm-idx 5.0 fixed (closes #21)
* bug in MySQL support fixed
* handling of the special character "dot" in listname and list address fixed
* prevent creation of dotqmail files containing uppercase characters (invalid)
* support regional language codes (e.g.: pt_BR)
* allow to reset the "owner" attribute
* the formerly required module "Encode" is now optional
* the perl module Email::Address can be used instead of Mail::Address
* most importantly: a new color scheme! (red/blue instead of blue/gray)
(the "classic" color scheme is still supported)
Version 3.1.4 - 03/26/02006
* new setting: DOTQMAIL_DIR (useful for multi domain vpopmail setups)
[suggested by Maurits Lamers]
* minor stylesheet change (circumvents IE rendering bug)
* case-insensitive check for mime type during address file upload
Version 3.1.3 - 02/22/02006
* fixed removal of dotqmail files
Version 3.1.2 - 02/15/02006
* honour DEFAULT_OPTIONS for new lists
* fixed portability issue of the suid-wrapper
Version 3.1.1 - 01/19/02006
* more careful removal of dotmail files
* allow dots in webuser names
* allow underscores in descriptive listname
Version 3.1 - 01/14/02006
* fully compatible with ezmlm-idx v5.0
* change language of list (idx >= 5.0)
* change charset of list (idx >= 5.0)
* 'modsub' and 'remote' can be changed independently
* improved configuration parsing
* requires Mail::Ezmlm v0.07
Version 3.0.2 - 01/11/02006
* fixed two confusing description strings
Version 3.0.1 - 01/06/02006
* allow several special characters in local part of mail address (RFC2822)
Version 3.0 - 12/25/02005
* complete interface rewritten for enhanced usability
* suppurt for msgsize, mimereject, trailer
* fixed insecure writing of webusers data
* define a default MAIL_DOMAIN
* changed directory for safely removed mailinglists
* requires the clearsilver template engine
Version 2.3 - 10/06/02005
* css styles are used instead of tables
* permission check for upload of files fixed
* removed some taint errors
* file upload typo fixed
* update of webusers file fixed
* moderator unsubscribe fixed
Version 2.2 - 26/01/02005 (not officially released)
* 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 checked)
* user-based permission for creating lists (can be set in webusersrc)
* the location of the webusers file is now an option in ezmlmwebrc
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.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 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 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.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 - 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 0.5 - 12/05/98 (Not Released)
* More bug fixes. Mainly for mathew@graham.
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.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.2 - 13/04/98 (Not Released)
* Allow list creation
* Allowed users to edit moderators
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.

33
ezmlm-web-3.2/copyright Normal file
View file

@ -0,0 +1,33 @@
ezmlm-web is distributed under the following BSD-style license:
Copyright (C) 1999/2000, Guy Antony Halse
Copyright (C) 2005-2007, Lars Kruse
All Rights Reserved.
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.

View file

@ -0,0 +1,69 @@
How to use ezmlm-web with debian
$Id$
Table of content
1 - install the package
2 - create user-sprecific suid binaries
3 - create a user-specific configuration
4 - enable stylesheet
5 - access control
6 - testing
#################################################################
1) install the package
The debian packages for ezmlm-web are not part of the main
debian distribution. Instead you have to use the debian repository
at systemausfall.org. Just add the following line to your
/etc/apt/sources.list:
deb http://systemausfall.org/toolforge/debian testing main contrib non-free
Now you may simply execute the following commands:
apt-get update
apt-get install ezmlm-web
2) create user-specific suid binaries
As perl-suid is considered deprecated, you have to compile a C-wrapper
for every user of your debian system, who wants to manage his mailing
lists with ezmlm-we.
Usually you do this only for your virtual mailing list user.
to create a wrapper, type the following:
ezmlm-web-make-suid USERNAME DESTINATION_FILE
e.g: ezmlm-web-make-suid john ~john/public_html/cgi-bin/ezmlm-web
3) create a user-specific configuration file (optional)
Copy /usr/share/doc/ezmlm-web/examples/ezmlmwebrc.dist to ~john/.ezmlmwebrc
and change its content according to your setup.
4) web server configuration
Adapt /usr/share/doc/ezmlm-web/examples/apache.conf.dist to your needs
and copy it to /etc/apache2/conf.d/ezmlm-web.
(for other web servers: use a similar setup)
5) access control (optional)
Configure access control for the fresh cgi binary. Maybe you can
use the htaccess.sample file in /usr/share/doc/ezmlm-web/examples as
a template.
Now you should create a webusers file to define the permissions of all
possible web users. An example webusers file can be found at
/usr/share/doc/ezmlm-web/examples/webusers.sample.
See /usr/share/doc/ezmlm-web/README for details about access control.
6) testing
Now you can access the ezmlm-web interface by using your web browser.
e.g. point it to http://localhost/~john/cgi-bin/ezmlm-web
If the web interface does not look like you would expect it, then you
may have to revise your stylesheet settings (HTML_CSS_COMMON and
HTML_CSS_COLOR in ezmlmwebrc).

View file

@ -0,0 +1,5 @@
ezmlm-web (3.2-1) unstable; urgency=low
* upstream update
-- Lars Kruse <devel@sumpfralle.de> Wed, 15 Aug 2007 19:30:19 +0200

View file

@ -0,0 +1 @@
5

View file

@ -0,0 +1,24 @@
Source: ezmlm-web
Section: admin
Priority: extra
Maintainer: Lars Kruse <devel@sumpfralle.de>
Build-Depends: debhelper (>>3.0.0), gcc (>= 2.95), dpatch
Standards-Version: 3.7.2
Package: ezmlm-web
Architecture: any
Depends: httpd-cgi, libemail-address-perl, libemail-ezmlm-perl (>= 0.07), libclearsilver-perl, ${perl:Depends}
Suggests: qmail-src, bash (>=2.0), gcc
Description: Web interface for ezmlm-idx mailing list administration
This web interface allows you to configure every part of an ezmlm-idx
mailing list.
Access control makes it possible, to share the administrative work in a
controlled way.
This package depends on the following programs, that are not part of the main
debian distribution:
* qmail - http://cr.yp.to/qmail.html
* ezmlm-idx - http://ezmlm.org/
* clearsilver for perl (>= 0.10.2) - http://www.clearsilver.net/downloads/
* Mail::Ezmlm perl module via cpan or as a debian package from
https://systemausfall.org/toolforge/debian

View file

@ -0,0 +1,35 @@
This package was debianized by Lars Kruse <devel@sumpfralle.de> on
Sa Apr 29 10:43:16 CEST 2006
It was downloaded from https://systemausfall.org/toolforge/ezmlm-web/download
Upstream Author: Lars Kruse <devel@sumpfralle.de>
Copyright:
Copyright (c) The Regents of the University of California.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. 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.
3. Neither the name of the University nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS 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.

View file

@ -0,0 +1 @@
etc/ezmlm-web

View file

@ -0,0 +1,4 @@
changelog
README
UPGRADING
TODO

View file

@ -0,0 +1 @@
examples/*

View file

@ -0,0 +1,5 @@
man/ezmlm-web-make-suid.1
man/ezmlm-web.wrapper.1
blib/man1/ezmlm-web.cgi.1p
man/ezmlmwebrc.5
man/webusers.5

View file

@ -0,0 +1 @@
# no patches required

86
ezmlm-web-3.2/debian/rules Executable file
View file

@ -0,0 +1,86 @@
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
# necessary for dpatch
.NOTPARALLEL:
configure: configure-stamp
configure-stamp: patch
dh_testdir
perl Makefile.PL INSTALLDIRS=vendor DESTDIR="$(CURDIR)/debian/ezmlm-web"
touch configure-stamp
build: build-stamp
build-stamp: configure-stamp
dh_testdir
$(MAKE)
# fix 'usr/local/' paths in various files
sed -i 's#usr/local/#usr/#g' examples/* suid-wrapper/* man/*
touch build-stamp
clean: clean-patched unpatch
clean-patched:
dh_testdir
dh_testroot
-$(MAKE) clean
rm -f build-stamp configure-stamp Makefile.old
dh_clean
patch: patch-stamp
patch-stamp:
dpatch apply-all
touch patch-stamp
unpatch:
dpatch deapply-all
rm -rf patch-stamp debian/patched
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
$(MAKE) install
install -c -m 644 examples/ezmlmwebrc.dist "$(CURDIR)/debian/ezmlm-web/etc/ezmlm-web/ezmlmwebrc"
# Build architecture-independent files here.
binary-indep: build install
# Build architecture-dependent files here.
binary-arch: build install
dh_testdir
dh_testroot
dh_installchangelogs
dh_installdocs
dh_installexamples
dh_install
dh_installman
dh_link
dh_strip
dh_compress
dh_fixperms
dh_perl
dh_installdeb
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install configure

View file

@ -0,0 +1,13 @@
# example configuration of ezmlm-web for apache-style web servers
# you should copy this file to e.g. /etc/apache2/conf.d
# don't forget to restart the web server afterwards
# map the static content (css files and images) to the base URL /ezmlm-web/
Alias /ezmlm-web/ /usr/local/share/ezmlm-web/www-data/
# usually you will have to create a suid wrapper for ezmlm-web to enable
# write access to the mailing list directories
# see 'man ezmlm-web-make-suid' for details
# e.g.: 'ezmlm-web-make-suid ezmlm /usr/local/bin/ezmlm-web'
#ScriptAlias /ezmlm-web /usr/local/bin/ezmlm-web

View file

@ -0,0 +1,114 @@
# Configuration file for ezmlm-web 3.2
# ===========================================================================
# 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 ;-)
#
# See the manpage of ezmlmwebrc(5) for a list of all available configuration
# settings.
# ---------------------------------------------------------------------------
# Where do we store lists on this server ... Try "$HOME_DIR/lists".
# This directory will automatically be created if needed.
# BEWARE: the (resulting) path MUST be absolute (starting with a slash)!
$LIST_DIR = "$HOME_DIR/lists";
# Multi-Domain-Support
# This is a quite advanced setting for special installations.
# Most people should just ignore it.
# Anyway - if you want to control more than one directory containing
# different lists, then you should:
# 1) copy examples/multidomain.conf.dist to /etc/ezmlm-web/multidomain.conf
# 2) adjust /etc/ezmlm-web/multidomain.conf to your setup
# 3) uncomment the following line
# 4) make sure that your multi domain settings are not overriden by settings below
#warn "multidomain.conf failed" unless (defined do "/etc/ezmlm-web/multidomain.conf");
# Where do we store the dotqmail files of this user?
# (defaults to the home directory of the executing user)
# You will have to change this value, if you use a multi domain
# vpopmail setup. Otherwise just leave the setting turned off.
# BEWARE: the (resulting) path MUST be absolute (starting with a slash)!
#$DOTQMAIL_DIR = "/home/vpopmail/domain";
# Where is the webusers file for access-permissions
# defaults to "$LIST_DIR/webusers"
#$WEBUSERS_FILE = "$LIST_DIR/webusers";
# Where are the language files
# usually something like /usr/local/share/ezmlm-web/lang
$LANGUAGE_DIR = "/usr/local/share/ezmlm-web/lang";
# Where are the template files
# usually something like /usr/local/share/ezmlm-web/template
$TEMPLATE_DIR = "/usr/local/share/ezmlm-web/template";
# Safe list deletion?
# 0 = move List to $LIST_DIR/_deleted_lists -> recoverable :)
# 1 = allow user to delete list completely. No backup, therefore no recovery.
$UNSAFE_RM = 0;
# Who is the qmail alias user on this system (usually alias ;)
$ALIAS_USER = "alias";
# Where do the qmail control files live on this system ...
# defaults to /var/qmail/control
$QMAIL_BASE = $Mail::Ezmlm::QMAIL_BASE . '/control';
# default mailing list domain name (optional)
#$MAIL_DOMAIN = "lists.someserver.org";
# default prefix of the local part of the addresses of mailing lists
# useful for some qmail-ldap setups
#$MAIL_ADDRESS_PREFIX = "lists-";
# 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";
# Which interface type should be displayed by default?
# available values are: easy, normal and expert
#$DEFAULT_INTERFACE_TYPE = "normal";
# What is the title of this document?
$HTML_TITLE = "ezmlm-web - a mailinglist administration interface";
# Optional: some permanent links (visible in the top right corner)
#@HTML_LINKS = (
# { name => 'ezmlm-web homepage',
# url => 'https://systemausfall.org/toolforge/ezmlm-web' },
# { name => 'domain\'s root',
# url => '/'},
# );
# use a cascading style sheet (css)
# the setting is interpreted as a URL
# this setting was formerly known as "HTML_CSS_FILE"
$HTML_CSS_COMMON = "/ezmlm-web/default.css";
# choose a coloring scheme - the available files are:
# color-blue-gray: default style used before v3.2
# color-red-blue: use gradients instead of plain colors (since v3.2)
#
# be aware, that some stylesheets may require additional graphic
# files in the same directory
$HTML_CSS_COLOR = "/ezmlm-web/color-red-blue.css";
# the default interface language
# all other available translation are available via the web interface
# the configured preferred browser language of a user can override this
# setting individually
$HTML_LANGUAGE = "en";

View file

@ -0,0 +1,26 @@
# Minimal configuration file for ezmlm-web 3.2
# ===========================================================================
# 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 ;-)
#
# See the manpage of ezmlmwebrc(5) for a list of all available configuration
# settings.
# ---------------------------------------------------------------------------
# Where do we store lists on this server ... Try "$HOME_DIR/lists".
# This directory will automatically be created if needed.
# BEWARE: the (resulting) path MUST be absolute (starting with a slash)!
$LIST_DIR = "$HOME_DIR/lists";
# Where are the language files
# usually something like /usr/local/share/ezmlm-web/lang
$LANGUAGE_DIR = "/usr/local/share/ezmlm-web/lang";
# Where are the template files
# usually something like /usr/local/share/ezmlm-web/template
$TEMPLATE_DIR = "/usr/local/share/ezmlm-web/template";

View file

@ -0,0 +1,7 @@
#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,56 @@
# This is a configuration file for ezmlm-web setups with more than one
# mailing list directory.
#
# If you want to use multi-domain support, then you should somehow know
# what you are doing. You have been warned! ;)
#
# Usually you just need to adjust the $DOMAIN setting below.
# Use the existing example as a template.
#
# If your setup is a little bit more exotic, then you can change the code, too.
# In the end, the setting $LIST_DIR should either be an empty string or
# the path of a mailing list directory. You may also want to take care for the
# $DOTQMAIL_DIR, $MAILDOMAIN and $MAIL_ADDRESS_PREFIX settings.
#
# BEWARE: you may not define new variables as - otherwise they could collide
# with the names of variables of the ezmlm-web program.
#
{
# we do not want to spoil our namespace - but we need CGI input
use CGI ();
$CURRENT_DOMAIN = new CGI->param('domain');
};
# domain names may not contain any special characters
# you must define at least "name" and "list_dir" for each domain
%DOMAINS = (
foo => {
name => "Example Domain Foo",
list_dir => "/data/lists/foo",
},
bar => {
name => "Example Domain Bar",
list_dir => "/data/lists/bar",
dot_dir => "/var/vpopmail/lists/bar",
mail_domain => "lists.bar.org",
mail_prefix => "lists-",
},
);
# this simple code defines $LIST_DIR and $DOTQMAILDIR in a sane way
if (defined($CURRENT_DOMAIN) && defined($DOMAINS{$CURRENT_DOMAIN})) {
$LIST_DIR = $DOMAINS{$CURRENT_DOMAIN}{'list_dir'}
if (defined $DOMAINS{$CURRENT_DOMAIN}{'list_dir'});
$DOTQMAIL_DIR = $DOMAINS{$CURRENT_DOMAIN}{'dot_dir'}
if (defined $DOMAINS{$CURRENT_DOMAIN}{'dot_dir'});
$MAIL_DOMAIN = $DOMAINS{$CURRENT_DOMAIN}{'mail_domain'}
if (defined $DOMAINS{$CURRENT_DOMAIN}{'mail_domain'});
$MAIL_ADDRESS_PREFIX = $DOMAINS{$CURRENT_DOMAIN}{'mail_prefix'}
if (defined $DOMAINS{$CURRENT_DOMAIN}{'mail_prefix'});
} else {
$LIST_DIR = '';
}

View file

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

2599
ezmlm-web-3.2/ezmlm-web.cgi Executable file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,6 @@
BEWARE: all files in this directory except for "en.hdf" are auto-generated by
scripts/update_language_files.sh.
Do not change these files! All changes will get lost!
Use the po files in the directory "intl" instead, if you want to update a
translation.

355
ezmlm-web-3.2/lang/en.hdf Normal file
View file

@ -0,0 +1,355 @@
Lang {
Name = English
Menue {
ListCreate = Create new list
ListDelete = Delete list
Subscribers = Subscribers
AllowList = allow list
DenyList = deny list
DigestList = digest list
ModList = moderators
ConfigMain = Options
ConfigSub = subscription
ConfigPost = posting
ConfigAdmin = administration
ConfigArchive = archive
ConfigProcess = processing
ConfigAll = overview
Gnupg = Key management
GnupgPublicKeys = public keys
GnupgSecretKeys = secret keys
GnupgGenerateKey = generate key
GnupgConvert = Encryption
GnupgOptions = encryption
TextFiles = Text files
ListSelect = Choose a list
Properties = Properties of
Language = Language
Interface = Interface
Help = Help (external)
SubscribeLog = Subscriber's log
DomainSelect = Choose a domain
}
Title {
ConfigMain = List configuration
ConfigSub = Subscription options
ConfigPosting = Posting options
ConfigAdmin = Remote administration
ConfigArchive = Archive options
ConfigProcess = Message processing
ConfigAll = Complete configuration
SubscriberList = Subscribers of the list
AllowList = Allowed users
DenyList = Blocked users
DigestList = Digest subscribers
ModList = Moderators of the mailinglist
ListCreate = Create a new list
ListSelect = Choose a list
ListDelete = Delete list
FileSelect = Choose a file for editing
FileEdit = Editing file
SubscribeLog = Subscription events
GnupgConvert = Encryption
GnupgPublic = Public keys
GnupgSecret = Secret keys
GnupgGenerateKey = Generate a new keypair
GnupgOptions = Encryption settings
DomainSelect = Choose a domain
}
Buttons {
Create = Create list
ConfirmDeletion = Delete the list
DeleteAddress = Delete address(es)
DownloadSubscribersList = Download subscribers
AddAddress = Add address(es)
UpdateConfiguration = Update configuration
UpdateGnupg = Update keyring
EditFile = Edit file
SaveFile = Save file
ResetFile = Remove customized file
LanguageSet = select
InterfaceSet = select
GnupgConvertToEncrypted = Convert to an encrypted mailinglist
GnupgConvertToPlain = Convert to a plaintext mainlinglist
DeletePublicKey = Delete public key(s)
DeleteSecretKey = Delete secret key(s)
GnupgImportKey = Import key
GnupgGenerateKey = Generate key pair
GnupgExportKey = download
}
ErrorMessage {
UnknownAction = this action is undefined
ParameterMissing = this action needs one or more parameters
Forbidden = Error: you are not allowed to do this!
InvalidFileName = The name of the file is invalid!
UnknownConfigPage = The chosen config page is invalid!
UnknownGnupgPage = The chosen gnupg page is invalid!
GnupgKeyImport = Failed to import the uploaded key!
GnupgDelKey = Failed to remove the key(s)!
GnupgGenerateKey = Failed generate a new key!
}
WarningMessage {
AddAddress = Adding of at least one mail address failed!
DeleteAddress = Removal of at least one mail address failed!
CreateList = Creation of new mailing list failed!
DeleteList = Removal of mailing list failed!
UpdateConfig = Update of configuration failed!
SaveFile = The file could not be saved!
ListNameAlreadyExists = There is already a list with this name!
ListAddressAlreadyExists = There is already a list with this address!
ListDoesNotExist = A list with this name does not exist!
ListDirAccessDenied = Unable to access the list's directory
TextDirAccessDenied = Unable to access the list's directory of text files
SafeRemoveRenameDirFailed = Unable to rename list for safe removal
DotQmailDirAccessDenied = Unable to read the mail user's home directory for .qmail files
SafeRemoveMoveDotQmailFailed = Unable to move .qmail files
UnsafeRemoveListDirFailed = Unable to delete list
UnsafeRemoveDotQmailFailed = Unable to delete .qmail files
InvalidFileFormat = The uploaded file must be a text file
WebUsersUpdate = Could not update the webusers file
WebUsersRead = Could not read the webusers file
InvalidListName = The name of the list contains invalid characters
ReservedListName = This listname may not be used as it is reserved for internal purposes
EmptyListName = The name of the list may not be empty
EmptyList = This list has no subscribers.
InvalidLocalPart = The local part of the list address is not valid
RequiresIDX5 = This action requires ezmlm-idx v5.0 or higher.
ResetFileIsDefault = There is no customized text file, that can be removed.
ResetFile = Removal of custimized text file failed.
LogFile = Reading of log file failed.
GnupgNoKeyFile = There was no key file selected for upload!
GnupgDelKey = Removal of (at least) one key failed!
GnupgNoKeySelected = There was no key selected to be removed!
GnupgNoName = The name of the key may not be empty!
GnupgInvalidExpiration = The expiration time is invalid!
GnupgInvalidKeySize = The length of the key is invalid!
GnupgExportKey = Export of key failed!
GnupgConvertEnable = Conversion to encrypted mailing list failed!
GnupgConvertDisable = Conversion to plaintext mailing list failed!
GnupgConvertAlreadyEnabled = Encryption was already enabled for this mailing list.
GnupgConvertAlreadyDisabled = Encryption was already disabled for this mailing list.
}
SuccessMessage {
AddAddress = The address was added to the list.
DeleteAddress = The address was removed from the list.
CreateList = The new mailing list was successfully created.
DeleteList = The mailing list was successfully removed.
UpdateConfig = The mailing list's configuration was successfully changed.
UpdateGnupg = The keyring has been changed successfully.
SaveFile = The file was saved.
ResetFile = The customized text file was successfully removed. From now on, the system-wide default text file will be used instead of it.
GnupgKeyImport = The key was successfully imported.
GnupgConvertEnable = Encryption is now enabled for this list.
GnupgConvertDisable = Encryption is now disabled for this list.
}
Options {
a = Archive mailing list messages
b = Only moderators are allowed to access the archive
d = Activate the digest list
f = Add a prefix to the subject line of outgoing messages
g = Archive requests from unrecognised senders are denied
h = Subscriptions do not require confirmation by the user
i = Index mailing list messages for WWW archive access
j = Unsubscribe does not require confirmation
k = Use deny list to prevent some users from posting
l = Remote administrators (moderators) may request a subscriber list
m = All incoming messages are moderated
n = Remote administrators (moderators) may edit text files in DIR/text
o = Only moderators may post
p = Allow subscription and archive retrieval for everyone
q = Process mailman-style requests (to local-request@domain)
r = Enable remote administration of the list (for moderators)
s = Subscriptions to the main list and the digest list will be moderated
t = Add a trailing text to every message
u = Only subscribed users may post messages (for moderated lists: always accept subscribers' postings)
w = Remove the ezmlm-warn invocations from the list setup (rarely useful)
x = Reset the list of to be stripped mime types to its default value
y = Request a confirmation mail for every posted message
special_replytoself = Redirect replies to the list
gnupg_plain_without_key = Send plaintext to the subscribers which have no key
gnupg_sign_messages = Sign outgoing messages with the list's key
}
Selections {
archive = Access to the archive is granted for
archive.bg = administrators
archive.Bg = subscribers and administrators
archive.BG = everyone
subscribe = Public subscription is
subscribe.pS = open
subscribe.ps = moderated
subscribe.P = not allowed
posting = Posting is
posting.MOU = allowed for everyone
posting.mOU = moderated for everyone
posting.mOu = allowed for subscribers and moderated for others
posting.MOu = allowed for subscribers
posting.moU = allowed only for moderators
confirmation = Confirmation mails are required for
confirmation.H = subscription
confirmation.J = unsubscription
confirmation.y = posting
}
Settings {
0 = Make the list a sublist of another list
3 = Set a custom "From:" header for outgoing messsages
4 = Define customized setting for digest creation (ezmlm-tstdig)
5 = Define the email address of the list owner
6 = Use a SQL database
7 = Define a custom path to the database for posting moderators
8 = Define a custom path to the database for subscription moderators
9 = Define a custom path to the database for remote administators
}
Misc {
HelpLink = The manual page of ezmlm-idx
Subscription = Subscription
Subscribers = subscribers
RemoteAdmin = Remote Admin
ListName = List Name
ListAddress = List Address
ListOptions = Basic List Options
AllowedToEdit = Users allowed to edit this list via web interface
HeaderFiltering = Header filtering
HeaderRemove = strip these header lines
HeaderKeep = keep only these header lines
HeaderAdd = Headers to add to all outgoing mail
MimeTypeExamples = Show some example mime types
MimeFiltering = Mime type filtering (for multipart mails)
MimeRemove = strip these from all messages
MimeKeep = keep only these in messages
MimeReject = Messages containing any of these mime type will be rejected
EditFileInfo {
CommonTags = common tags
ListNameLocal = The local part of the list name
ListNameHost = The host name of the list name
MessageNumber = Number of the respective message
SubAddress = The subscription address
SubReplyAddress = The address a subscriber must reply to
AcceptanceAddress = The acceptance address
RejectionAddress = The rejection address
}
SuggestDefaultPath = You will have to manage them manually.
PostModPathWarn = Posting moderators are stored in a non-standard location
SubModPathWarn = Subscription moderators are stored in a non-standard location
RemoteAdminPathWarn = Remote administrators are stored in a non-standard location
MessageSize.Max = Reject messages exceeding a specified value
MessageSize.Min = Reject messages smaller than a specified value
MessageSize.Unit = bytes
NoFiles = There are no files in the text directory of the mailinglist.
AddSubscriberAddress = Add a new mail address:
AddSubscriberFile = Upload a text file containing mail addresses to be added:
SuggestDefaultPath = It is recommended to use the default path for the moderation database. Otherwise you cannot manage the moderators' list with ezmlm-web.
FooterText = a web interface for
NoListsAvailable = I could not find any accessible list for you.
ConfirmDelete = Do you really want to remove this list completely?
CustomizedFiles = customized files
DefaultFiles = default files
ListLanguage = Language of the list
ListCharset = Charset of the list
ModSubOverridesRemote = Hint: if both the database of subscripton moderators and of remote administrators use customized locations, then the database of subscription moderators will be used for both of them
GnupgNoPublicKeys = There are no public keys available.
GnupgNoSecretKeys = There are no secret keys available.
GnupgImportKey = Import a new key from a file:
GnupgKeyName = Name of the key
GnupgKeyComment = Comment (optional)
GnupgKeySize = Length of the key (bytes)
GnupgKeyExpires = Expiration time (years)
Never = never
NoDomainsAvailable = No domains are available.
CopyLinesEnabled = Add some lines of every original message to automatic replies
CopyLinesNumber = number of lines
Interfaces {
easy = basic
normal = default
expert = expert
}
MailAddress = Mail address
SubscribeAction = Event
SubscribeActionDetails = Details
SubscribeActions {
remove = removed
add = added
mod = moderated
manual = manual
auto = automatical
unknown = unknown
}
Date = Date
}
Introduction {
ConfigAdmin = Remote administrators are (by default) also moderators for subscription and for posting. They may have the permission to (un)subscribe users and to change the text files of the list by sending emails to the mailing list software.
ConfigArchive = The mailing list archive can be accessed by mail. Additionally you will want to create a list archive, if you plan to publish it (e.g. with ezmlm-www).
ConfigProcess = Modify some message properties, before they are distributed to the subscribers.
ConfigMain = Here you find some settings, that did not fit into any other category.
ConfigPosting = The posting configuration determines, who is allowed to send messages to the list and how these mails will be processed.
ConfigSub = Here you may define, who is allowed to subscribe to the list and you can set some details of the subscription process.
ConfigAll = This is the complete list of all available properties of the list. Usually it should be easier to use the topic-based configuration pages, but - of course - this is your choice.
ListDelete = This mailinglist and everything inside of it will be removed completely.
AllowList = Members of the allow list will not receive outgoing mails, but they have the same rights, as normal subscribers. Usually the allow list will contain mail aliases of subscribers.
DenyList = If you want to prevent specific mail addresses from using this list (subscription, posting, ...), then you should add them to the deny list and activate it. This can be useful for annoying people and even for notorious vacation reply users. But since it is fairly easy to fake an mail address, this will not really improve security.
DigestList = Some users of your mailing list may prefer to receive a regular digest instead of all mailing list messages. They will usually not take part in discussions, but aret somehow interested anyway.
ModList = Moderators (for posting or subscription) and remote administrators can be allowed to manage the most important parts of mailing list administration: moderating subscription and posting, changing filtering rules, and managing users. Moderators may even be configured to be the only ones, who are allowed to send mails to the mailing list.
SubscriberList = Subscribers of a mailing list will receive all outgoing message of the list. They may also be allowed to post messages directly or moderated. Usually anonymous users are able to subscribe and unsubscribe without the help of an administrator - but of course, you may configure this to suit your needs.
TextFiles = The selection box contains a list of files available in the DIR/text directory. These files are sent out in response to specfic user requests or as part of all outgoing messages. Edit them as necessary.
EditTextFile = Change this text according to your needs. Maybe you would like to use some of the reserved tags, that are described at the bottom of this page.
ResetTextFile = This text file was customized for this list. If you want to use the system-wide default text file of the choosen language instead, you may remove this customized file.
GnupgConvert = You can convert a normal mailinglist to an encrypted list and vice versa.
GnupgGenerateKey = Every encrypted mailing list needs a secret key. You can import this key or create it using the form below. After submitting the form, you have to be patient, as it takes some time (up to several minutes) to create a key.
GnupgOptions = Configure some useful settings of the encrypted mailing list.
GnupgSecret = Every every mailing list needs a secret key to decrypt incoming. You should take care that the secret key is kept safe. Otherwise the security of your mailing list is broken.
GnupgPublic = There should be a public key for every subscriber of the mailing list. Additionally there is the key of the mailing list, which should be distributed to all subscribers. It is safe to openly publish public keys.
}
Legend {
ConfigAdmin = Remote administrator's permissions
ConfigArchive = Archive configuration
ConfigPosting = Posting rules
ConfigSub = Subscription details
ConfigMain = General list configuration
ConfigProcess = Processing rules
ConfigAll = Available properties
ListCreate = Properties of the new list
ListDelete = Remove this mailinglist
RelevantOptions = Useful settings
MembersList = Manage subscribers
MembersAllow = Manage allowed users
MembersDeny = Manage blocked users
MembersDigest = Manage digest subscribers
MembersMod = Manage moderators and administrators
TextFiles = Available text files
TextFileEdit = Edit content of text file
TextFileReset = Discard customized text
TextFileInfo = Useful placeholders
AvailableLists = Available lists
SubscribeLog = Events
GnupgConvert = Encryption support
GnupgPublicKeys = Public keys of this list
GnupgSecretKeys = Secret keys of this list
GnupgKeyImport = Import a key
GnupgGenerateKey = Generate the key for this list
GnupgOptions = Encryption settings
AvailableDomains = Available domains
}
}

View file

@ -0,0 +1,25 @@
.TH ezmlm-web-make-suid 1 "January 02006" "ezmlm-web" "helper script"
.SH NAME
ezmlm-web-make-suid \- create user-specific suid wrappers for ezmlm-web
.SH SYNOPSIS
.B ezmlm-web-make-suid
[\fIUSERNAME\fR] \fIDESTINATION_FILE\fR
.SH DESCRIPTION
.PP
Create a user-specific copy of the suid wrapper for ezmlm-web. This is
necessary, as the mailing lists are usually not owned by the user of the
webserver, that executes the cgi.
.PP
The destination file determines where to put the resulting wrapper.
.PP
Only root is allowed to choose a username.
.SH EXAMPLES
.PP
ezmlm-web-make-suid john ~john/public_html/ezmlm-web
.SH AUTHOR
Written by Lars Kruse
.SH "REPORTING BUGS"
Report bugs to <devel@sumpfralle.de>
.SH COPYRIGHT
Copyright \(co 02006 Lars Kruse

View file

@ -0,0 +1,21 @@
.TH ezmlm-web.wrapper 1 "May 02006" "ezmlm-web" "suid wrapper"
.SH NAME
ezmlm-web.wrapper \- pre-compiled (binary) template for suid wrappers around ezmlm-web
.SH DESCRIPTION
.PP
This pre-compiled (binary) wrapper for ezmlm-web can be used as a template for
user-specific suid binary wrappers.
To create a user-specific suid binary wrapper, you may use one of the following
methods:
1.) run ezmlm-web-make-suid
2.) copy/chmod/chown the wrapper file manually
.SH AUTHOR
Written by Lars Kruse
.SH "REPORTING BUGS"
Report bugs to <devel@sumpfralle.de>
.SH SEE ALSO
ezmlm-web-make-suid(1)
.SH COPYRIGHT
Copyright \(co 02006 Lars Kruse

View file

@ -0,0 +1,132 @@
.TH ezmlmwebrc 5 "April 02007" "ezmlm-web" "configuration file"
.SH NAME
ezmlmwebrc \- configuration file for ezmlm-web
.SH DESCRIPTION
.PP
\fBezmlmwebrc\fR contains the configuration settings necessary for ezmlm-web.
.PP
The file is required for ezmlm-web and must exist in one of the following
locations:
.IP \fB~/.ezmlmwebrc\fR
user-specific configuration file
.IP \fB/etc/ezmlm-web/ezmlmwebrc\fR
system-wide default configuration file
.IP \fB/etc/ezmlm/ezmlmwebrc\fR
system-wide default configuration file (deprecated since v2.2)
.PP
Additionally the location of the configuration file may be overriden by the
command line switch \fB\-C\fR of \fIezmlm-web.cgi (1p)\fR.
.SH FILE FORMAT
.PP
The file itself is sourced by the perl script \fIezmlm-web.cgi\fR, so it is
required that the file conforms to the syntax of perl scripts. See the
manpage of perl (1) for details.
.PP
You should avoid to declare other variables than the settings described below.
Otherwise you may run into namespace conflicts. Just don't do it.
.PP
You may rely on the existence (and meaningful content) of the following
variables:
.IP \fI$USER\fR
the name of the owner of the current process
.IP \fI$HOME\fR
the home directory of the owner of the current process
.SH REQUIRED SETTINGS
.IP \fB$LIST_DIR\fR
This is the directory containing the lists, that you want to manage via
ezmlm-web. It will be created automatically if it does not exist yet.
The value \fI$HOME/lists\fR should be quite reasonable.
.IP \fB$LANGUAGE_DIR\fR
This directory contains the language files of ezmlm-web (e.g. \fIen.hdf\fR).
Usually this should be something like \fI/usr/local/share/ezmlm-web/lang\fR.
.IP \fB$TEMPLATE_DIR\fR
This directory contains the template files of ezmlm-web (e.g. \fImain.cs\fR).
Usually this should be something like
\fI/usr/local/share/ezmlm-web/template\fR.
.SH OPTIONAL SETTINGS
.IP \fB$DEFAULT_OPTIONS\fR
Specify the default options used for ezmlm-make (1) when creating a new list.
The default value is: \fIaBDFGHiJkLMNOpQRSTUWx\fR. See the manpage of
ezmlm-make (1) for details.
.IP \fB$ALIAS_USER\fR
The alias user of a qmail installation manages all mail addresses that are
not handled by specific dotqmail files or other definitions. It defaults to
\fIalias\fR.
.IP \fB$QMAIL_BASE\fR
This is the control directory of your qmail setup. It defaults to
\fI/var/qmail/control\fR.
.IP \fB$DOTQMAIL_DIR\fR
The directory of the dotqmail (5) files of the lists managed by ezmlm-web.
It defaults to the home directory of the owner of the current process
(\fI$HOME\fR).
.IP \fB$WEBUSERS_FILE\fR
This file contains the access rules for the lists managed by ezmlm-web.
Read the README file of ezmlm-web for details. This setting defaults to
\fI$LISTS/webusers\fR.
.IP \fB$MAIL_DOMAIN\fR
Specify the default domain name of new mailing lists. Leave it empty if you
want ezmlm-web to try to detect this value automatically.
.IP \fB$MAIL_ADDRESS_PREFIX\fR
Specify the default prefix for the local part of the addresses of new mailing
lists. By default it is empty ('').
.IP \fB$PRETTY_NAMES\fR
Do you want to store connections between real names and mail addresses if both
were provided when adding a new subscriber? This results in a file called
\fIwebnames\fR being created in every mailing list directory when necessary.
.IP \fB$FILE_UPLOAD\fR
Should the upload of subscriber files be possible? The default is \fI1\fR.
If you consider this as a security risk, then you should set it to \fI0\fR.
.IP \fB$UNSAFE_RM\fR
This setting defines, if list removal requested via the web interface should
be recoverable or not. The value \fI1\fR will make ezmlm-web remove the list
directory completely without any chance of recovery. The default value \fI0\fR
will just move deleted lists to a safe place. Thus deletion is recoverable.
.IP \fB$HTML_TITLE\fR
Print a reasonable name of the web interface to the left upper corner of every
page. By default this string is empty.
.IP \fB$HTML_CSS_COMMON\fR
This is the URL of the basic stylesheet file to be used by ezmlm-web. Make sure
it is actually available, as the design of the web interface will suffer a lot
without it.
.IP \fB$HTML_CSS_COLOR\fR
The color scheme of the web interface is separated from the basic stylesheet.
This URL should point to the location of the color scheme CSS file. Your
interface will be plain black and white if the stylesheet is not available.
Be aware, that some of the supplied color schemes may require additional
files (images) in the same directory. Currently 'color-red-blue.css'
and 'color-blue-gray.css' are available.
.IP \fB@HTML_LINKS\fR
This array may contain hashes with the elements \fIname\fR and \fIurl\fR.
These links will be visible in the upper right corner of every page.
Please pay attention to the syntax of perl and use the example configuration
file distributed with ezmlm-web as a template. By default, this array is
empty.
.IP \fB$HTML_LANGUAGE\fR
Specify the defaut language of the web interface. This value will be overriden
when the browser requests an available language or when the user explicitly
selects a different language. The default value is \fIen\fR.
.IP \fB$DEFAULT_INTERFACE_TYPE\fR
Set the default interface template. Available values are \fIeasy\fR,
\fInormal\fR and \fIexpert\fR. The default value is \fInormal\fR.
.IP \fB$GPG_SUPPORT\fR
Enable support for encrypted mailing lists. Currently this feature is still
considered as beta quality. User reports are warmly welcome!
.IP \fB%DOMAINS\fR
This hash of hashes (\fIname\fR associated with a hash of domain specific
information) can be used to define a multi-domain setup. See the example
configuration file (\fImultidomain.conf\fR) as distributed with ezmlm-web for
more details.
.SH EXAMPLES
.IP "A minimal example configuration file:"
.sp
.nf
$LIST_DIR = "$HOME_DIR/lists";
$LANGUAGE_DIR = "/usr/local/share/ezmlm-web/lang";
$TEMPLATE_DIR = "/usr/local/share/ezmlm-web/template";
.SH AUTHOR
Written by Lars Kruse
.SH "REPORTING BUGS"
Report bugs to <devel@sumpfralle.de>
.SH COPYRIGHT
Copyright \(co 02007 Lars Kruse

View file

@ -0,0 +1,60 @@
.TH webusers 5 "April 02007" "ezmlm-web" "access configuration file"
.SH NAME
webusers \- define the access permissions for a directory of lists
.SH DESCRIPTION
.PP
\fBwebusers\fR contains the access definitions for the lists below a certain
directory.
.PP
This file is optional. The actions of users are unrestricted, if the
\fBwebusers\fR file does not exist. Be careful when using this setting.
.PP
A webusers file is only useful if you can request some kind of authentication
from the user. Usually this should be done via http-authentication. See
the INSTALL file for more details.
.SH LOCATION
By default the \fBwebusers\fR file is located in the same directory as the
mailing lists. This can be adjusted with the setting \fIWEBUSERS_FILE\fR in
the configuration file ezmlmwebrc (5). Read its manpage for details.
.SH FILE FORMAT
.IP "The file consists of lines of the following form:"
.sp
.nf
LISTNAME: USER1 USER2
.PP
Empty lines and lines starting with a '#' are ignored. The same goes for
invalid configuration lines.
.PP
If \fILISTNAME\fR equals the string \fIALL\fR, then the following users are
allowed to manage all existing mailing lists.
.PP
If \fILISTNAME\fR equals the string \fIALLOW_CREATE\fR, then the following
users are allowed to create new lists.
.PP
Otherwise the named users are allowed to manage only list \fILISTNAME\fR.
.PP
If one of the usernames equals the string \fIALL\fR, then every authenticated
user is allowed to perform the action specified by \fILISTNAME\fR.
.SH EXAMPLES
.IP "A minimal example access configuration file:"
.sp
.nf
comm: guy arb
users: arb
members: ALL
ALL: root
ALLOW_CREATE: root guy
.PP
In the example above, the users \fIroot\fR and \fIguy\fR are allowed to create
new lists.
.PP
Every authenticated user may configure the list \fImembers\fR.
.PP
The user \fIroot\fR can manage all mailing lists.
.SH AUTHOR
Written by Lars Kruse
.SH "REPORTING BUGS"
Report bugs to <devel@sumpfralle.de>
.SH COPYRIGHT
Copyright \(co 02007 Lars Kruse

View file

@ -0,0 +1,5 @@
debian
intl
spec
package.exclude
README.crypto

76
ezmlm-web-3.2/scripts/debian.sh Executable file
View file

@ -0,0 +1,76 @@
#!/bin/sh
#
# Copyright (c) 02005 Lars Kruse <devel@sumpfralle.de>
#
# License: This script is distributed under the terms of
# the BSD license
#
# build a debian package
#
set -ue
######### some settings ###########
ROOT_DIR=$(dirname "$0")/..
ROOT_DIR=$(cd "$ROOT_DIR"; pwd)
BUILD_DIR=/tmp/ezmlm-web-build-$$
PACKAGE_DIR=$ROOT_DIR/../tags/packages
[ ! -e "$PACKAGE_DIR" ] && PACKAGE_DIR=$ROOT_DIR/../packages
[ ! -e "$PACKAGE_DIR" ] && echo "package dir not found" >&2 && exit 1
############# do it ###############
[ -e "$BUILD_DIR" ] && rm -rf "$BUILD_DIR"
ACTION=build
[ $# -gt 0 ] && ACTION=$1 && shift
case "$ACTION" in
build )
mkdir -p "$BUILD_DIR/usr/share/ezmlm-web"
mkdir -p "$BUILD_DIR/usr/lib/ezmlm-web"
mkdir -p "$BUILD_DIR/usr/bin"
mkdir -p "$BUILD_DIR/usr/share/man/man1"
mkdir -p "$BUILD_DIR/usr/share/doc/ezmlm-web/examples"
mkdir -p "$BUILD_DIR/etc/ezmlm-web"
mkdir -p "$BUILD_DIR/var/www"
svn export "$ROOT_DIR/template" "$BUILD_DIR/usr/share/ezmlm-web/template" >/dev/null
svn export "$ROOT_DIR/css" "$BUILD_DIR/usr/share/ezmlm-web/css" >/dev/null
ln -s /usr/share/ezmlm-web/css/default.css "$BUILD_DIR/var/www/ezmlm-web.css"
svn export "$ROOT_DIR/lang" "$BUILD_DIR/usr/share/ezmlm-web/lang" >/dev/null
cp "$ROOT_DIR/ezmlm-web.cgi" "$BUILD_DIR/usr/lib/ezmlm-web/ezmlm-web.pl"
cp "$ROOT_DIR/debian-related/index.c" "$BUILD_DIR/usr/share/ezmlm-web"
cp "$ROOT_DIR/htaccess.sample" "$BUILD_DIR/usr/share/doc/ezmlm-web/examples"
cp "$ROOT_DIR/webusers.sample" "$BUILD_DIR/usr/share/doc/ezmlm-web/examples"
sed 's#/usr/local/#/usr/#g' "$ROOT_DIR/ezmlmwebrc" | tee "$BUILD_DIR/usr/share/doc/ezmlm-web/examples/ezmlmwebrc" >"$BUILD_DIR/etc/ezmlm-web/ezmlmwebrc"
cp "$ROOT_DIR/README" "$BUILD_DIR/usr/share/doc/ezmlm-web"
cp "$ROOT_DIR/TODO" "$BUILD_DIR/usr/share/doc/ezmlm-web"
cp "$ROOT_DIR/UPGRADING" "$BUILD_DIR/usr/share/doc/ezmlm-web"
cp "$ROOT_DIR/copyright" "$BUILD_DIR/usr/share/doc/ezmlm-web"
cp "$ROOT_DIR/debian-related/README.Debian" "$BUILD_DIR/usr/share/doc/ezmlm-web"
cp "$ROOT_DIR/debian-related/ezmlm-web-make-suid" "$BUILD_DIR/usr/bin"
gzip --best -c "$ROOT_DIR/changelog" \
>"$BUILD_DIR/usr/share/doc/ezmlm-web/changelog.gz"
gzip --best -c "$ROOT_DIR/debian-related/changelog.Debian" \
>"$BUILD_DIR/usr/share/doc/ezmlm-web/changelog.Debian.gz"
gzip --best -c "$ROOT_DIR/debian-related/man/ezmlm-web-make-suid.1" \
>"$BUILD_DIR/usr/share/man/man1/ezmlm-web-make-suid.1.gz"
svn export "$ROOT_DIR/debian-related/DEBIAN" "$BUILD_DIR/DEBIAN" >/dev/null
fakeroot dpkg-deb --build "$BUILD_DIR" "$PACKAGE_DIR"
rm -rf "$BUILD_DIR"
;;
check )
PACKAGE_FILE=$(find "$PACKAGE_DIR" -type f -name "ezmlm-web*" | grep "\.deb$" | sort -n | tail -1)
if [ -z "$PACKAGE_FILE" ]
then echo "no debian package found in $PACKAGE_DIR"
else lintian "$PACKAGE_FILE"
fi
;;
* )
echo "Syntax: $(basename $0) [ build | check | help ]"
echo
;;
esac

View file

@ -0,0 +1,84 @@
#!/bin/sh
#
# this script symlinks all ezmlm-web po files to a language directory
# structure, as it is used by the pootle translation server
#
# all language files are chgrp'ed to the 'pootle' group and group write
# permissions are added
#
# call this script whenever you add _new_ languages to your translation server
#
# it is useful to be root while calling it - otherwise chgrp will fail
#
#
# Copyright 2007 Lars Kruse <devel@sumpfralle.de>
#
# This file is part of ezmlm-web.
#
# ezmlm-web is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# ezmlm-web is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the ezmlm-web; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
set -eu
test $# -ne 1 && echo "Usage: $(basename $0) TARGET_DIR" && exit 1
test ! -d "$1" && echo "target directory does not exist: '$1'" && exit 1
if test "$(id -u)" == 0
then is_root=1
else is_root=0
echo "$(basename $0) not running as root: the language files will not be writeable for pootle" >&2
echo " run this script as root to change the permissions of the language files appropriately" >&2
fi
DEST_GROUP=pootle
TARGETPATH=${1%/}
# BASEPATH must be absolute
BASEPATH=$(cd $(dirname "$0")/..; pwd)
############# functions ###############
# symlink a language file and chgrp if possible
# Paramters: LANG_FILE LANGUAGE
process_language_file()
{
test ! -d "${TARGETPATH}/$2" && mkdir -p "${TARGETPATH}/$2"
ln -sfn "$1" "${TARGETPATH}/$2/"
if test "$is_root" == 1
then chgrp "$DEST_GROUP" "$1" "$TARGETPATH/$2"
chmod g+w "$1" "$TARGETPATH/$2"
fi
}
############# main #################
for language in $(ls ${BASEPATH}/intl/) ; do
test ! -d "${BASEPATH}/intl/${language}" && continue
echo "Processing $language ..."
[ ! -d ${TARGETPATH}/${language} ] && mkdir -p ${TARGETPATH}/${language}
## base translation
find "${BASEPATH}/intl/${language}" -name \*.po | while read fname
do process_language_file "$fname" "$language"
done
done
echo "Processing template files ..."
find ${BASEPATH}/intl -type f -name \*.pot | while read fname
do process_language_file "$fname" "template"
done

View file

@ -0,0 +1,339 @@
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#
# Copyright 2007 Lars Kruse <devel@sumpfralle.de>
#
# This file is part of ezmlm-web.
#
# All available hdf language files are parsed for creating pot (po-template) files.
# All existing po-file are merged with these templates to remove obsolete msgids.
# Additionally every msgstr of the english original is set to the value of the
# respective msgid.
# All resulting po files are chmod'ed to 0666 - this is useful if you locally use
# services like pootle.
# If there were no changes besides the "POT-Creation-Date" header, then the file
# is reverted via svn to avoid unnecessary commits.
#
#
# ezmlm-web is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# ezmlm-web is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with ezmlm-web; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
import os
import sys
try:
import translate.storage.po, translate.convert.pot2po, translate.tools.pocompile
except ImportError, errMsg:
sys.stderr.write("Failed to import a python module of the 'translate' package!\n")
sys.stderr.write("Please install the appropriate files - for debian just do 'apt-get install translate-toolkit'.\n")
sys.stderr.write("\tOriginal error message: %s\n\n" % errMsg)
sys.exit(1)
try:
import neo_cgi, neo_util
except ImportError, errMsg:
sys.stderr.write("Failed to import a python module of the 'clearsilver' package!\n")
sys.stderr.write("Please install the appropriate files - for debian just do 'apt-get install python-clearsilver'.\n")
sys.stderr.write("\tOriginal error message: %s\n\n" % errMsg)
sys.exit(1)
try:
import subprocess
except ImportError, errMsg:
sys.stderr.write("Failed to import the python module 'subprocess'!\n")
sys.stderr.write("Please install python v2.4 or higher.\n")
sys.stderr.write("\tOriginal error message: %s\n\n" % errMsg)
sys.exit(1)
HDF_DIR = 'lang'
## name of the main domain and prefix for all plugin domains
GETTEXT_DOMAIN = 'ezmlm-web'
## set the msgstrs for this language to the value of the respective msgids
DEFAULT_LANG = 'en'
PO_DIR = 'intl'
## mail adress for translation bugs
MAIL_ADDRESS = 'devel@sumpfralle.de'
## the complete list of languages wastes a lot of space - for now we use only a few
#ALL_LANGUAGES = "af aka am ar bn ca cs da de el en es et eu fa fi fr fur gl he hi hr hu hy is it ja ka kg ko ku lt lv mr ms mt nb ne nl nn ns pa pl pt ru sl sr st sv tr uk ve vi xh".split(" ")
ALL_LANGUAGES = "cs da de en es fi fr hu it ja nl pl pt pt_BR ru sl sv".split(" ")
## use subversion for reverting?
USE_SVN = True
LANGUAGE_NAMES = {
"cs": 'Český',
"da": 'Dansk',
"de": 'Deutsch',
"en": 'English',
"es": 'Español',
"fi": 'Suomi',
"fr": 'Français',
"hu": 'Magyar',
"it": 'Italiano',
"ja": '日本語',
"nl": 'Nederlands',
"pl": 'Polski',
"pt": 'Português',
"pt_BR": 'Português do Brasil',
"ru": 'Русский',
"sl": 'Slovensko',
"sv": 'Svenska',
}
## which languages should fall back to another language (instead of english)
## necessary e.g. for the 100%-fuzzy release of "pt" based on "pt_BR"
FALLBACK_DEFINITIONS = {
"pt": [ "pt_BR" ],
}
# --------------=-=-=- functions -=-=-=--------------------
def revert_if_unchanged(po_file):
try:
proc = subprocess.Popen(
shell = False,
stdout = subprocess.PIPE,
args = [ "svn", "diff", po_file ] )
except OSError, err_msg:
sys.stderr.write("Failed to execute subversion's diff: %s\n" % err_msg)
return
(stdout, stderr) = proc.communicate()
if proc.returncode != 0:
sys.stderr.write("Subversion returned an error: %d\n" % proc.returncode)
return
## no changes at all?
if not stdout:
return
lines = [ l for l in stdout.splitlines()
if ((l.find("POT-Creation-Date:") < 0 ) and \
((l.startswith("+") and (not l.startswith("+++"))) or \
(l.startswith("-") and (not l.startswith("---"))))) ]
## were there relevant changes?
if lines:
return
## revert to previous state
proc = subprocess.Popen(
shell = False,
args = [ "svn", "revert", po_file ] )
proc.wait()
def generate_po_files(hdf_file, po_dir, textDomain):
## prepare hdf
if ((not os.path.isfile(hdf_file)) or (not os.access(hdf_file, os.R_OK))):
sys.stderr.write("Unable to read the hdf file: %s\n" % hdf_file)
return
if not os.path.isdir(po_dir):
os.mkdir(po_dir)
pot_file = os.path.join(po_dir, "%s.pot" % textDomain)
hdf = neo_util.HDF()
hdf.readFile(hdf_file)
## update pot
if not os.path.isfile(pot_file):
sys.stdout.write("Creating: %s\n" % pot_file)
pot = translate.storage.po.pofile(encoding="utf-8")
pot.makeheader(pot_creation_date=True)
pot.updateheader(add=True, Project_Id_Version='ezmlm-web 3.2', pot_creation_date=True, language_team='Lars Kruse <%s>' % MAIL_ADDRESS, Report_Msgid_Bugs_To=MAIL_ADDRESS, encoding='utf-8', Plural_Forms=['nplurals=2','plural=(n != 1)'])
#TODO: somehow we need 'updateheaderplural'
else:
sys.stdout.write("Loading: %s\n" % pot_file)
pot = translate.storage.po.pofile.parsefile(pot_file)
## remove all msgids - we will add them later
pot.units = []
## add new entries
def walk_hdf(prefix, node):
def addPoItem(hdf_node):
## ignore hdf values with a "LINK" attribute
for (key, value) in hdf_node.attrs():
if key == "LINK":
return
if not hdf_node.value():
return
item = pot.findunit(hdf_node.value())
if not item:
item = pot.addsourceunit(hdf_node.value())
item.addlocation("%s%s" % (prefix, hdf_node.name()))
while node:
if node.name():
new_prefix = prefix + node.name() + '.'
else:
new_prefix = prefix
## as the attribute feature of clearsilver does not work yet, we
## have to rely on magic names to prevent the translation of links
if not (new_prefix.endswith(".Link.Rel.") \
or new_prefix.endswith(".Link.Prot.") \
or new_prefix.endswith(".Link.Abs.") \
or new_prefix.endswith(".Link.Attr1.name.") \
or new_prefix.endswith(".Link.Attr1.value.") \
or new_prefix.endswith(".Link.Attr2.name.") \
or new_prefix.endswith(".Link.Attr2.value.") \
or new_prefix == "Lang.Name."):
addPoItem(node)
walk_hdf(new_prefix, node.child())
node = node.next()
walk_hdf("",hdf)
pot.savefile(pot_file)
## create po files
for ld in ALL_LANGUAGES:
if not os.path.isdir(os.path.join(po_dir,ld)):
os.mkdir(os.path.join(po_dir, ld))
if not os.path.isdir(os.path.join(po_dir,ld, 'LC_MESSAGES')):
os.mkdir(os.path.join(po_dir, ld, 'LC_MESSAGES'))
po_file = os.path.join(po_dir, ld, 'LC_MESSAGES', "%s.po" % textDomain)
if not os.path.isfile(po_file):
translate.convert.pot2po.convertpot(file(pot_file), file(po_file,'w'), None)
else:
po2_file = po_file + '.new'
translate.convert.pot2po.convertpot(file(pot_file), file(po2_file,'w'), file(po_file))
os.rename(po2_file, po_file)
if ld == DEFAULT_LANG:
## set every msgstr to the respective msgid
po_data = translate.storage.po.pofile.parsefile(po_file)
po_data.removeduplicates()
po_data.removeblanks()
for po_unit in po_data.units:
po_unit.settarget(po_unit.getsource())
po_data.savefile(po_file)
else:
po_content = translate.storage.po.pofile.parsefile(po_file)
po_content.removeduplicates()
po_content.removeblanks()
## go through all msgstr and remove empty ones
for index in range(len(po_content.units)-1, 0, -1):
if po_content.units[index].isfuzzy() and \
(po_content.units[index].msgidlen() == 0):
po_content.units.remove(po_content.units[index])
po_content.savefile(po_file)
if USE_SVN:
revert_if_unchanged(po_file)
## make it writeable for pootle
os.chmod(po_file, 0666)
## compile po file
mo_file = po_file[:-3] + '.mo'
translate.tools.pocompile.convertmo(file(po_file), file(mo_file,'w'), file(pot_file))
def generate_translated_hdf_files(orig_hdf_file, po_dir, hdf_dir, textdomain):
for lang in ALL_LANGUAGES:
if lang != DEFAULT_LANG:
## are there any language fallbacks? (e.g. "de" for "de_AT")
if lang in FALLBACK_DEFINITIONS:
src_languages = FALLBACK_DEFINITIONS[lang]
else:
src_languages = []
## first choice: always the language itself
src_languages.insert(0, lang)
generate_translated_hdf_file(orig_hdf_file, po_dir, hdf_dir,
textdomain, lang, src_languages)
def generate_translated_hdf_file(orig_hdf_file, po_dir, hdf_dir, textdomain,
language, src_languages):
import gettext
## prepare original hdf
if ((not os.path.isfile(orig_hdf_file)) or (not os.access(orig_hdf_file, os.R_OK))):
sys.stderr.write("Unable to read the hdf file: %s\n" % orig_hdf_file)
return
hdf = neo_util.HDF()
hdf.readFile(orig_hdf_file)
## name of new hdf file
new_hdf_file = os.path.join(hdf_dir, language + '.hdf')
## create translation object
translator = gettext.translation(
textdomain,
localedir = po_dir,
languages = src_languages)
## translate entries
## count the number of translated items - so we can decide later, if we
## want to create the language file
def walk_hdf(prefix, node):
translate_count = 0
def addHdfItem(hdf_node):
## ignore hdf values with a "LINK" attribute
for (key, value) in hdf_node.attrs():
if key == "LINK":
return
if not hdf_node.value():
return
translated = translator.gettext(hdf_node.value())
if translated:
hdf.setValue("%s%s" % (prefix, hdf_node.name()), translated)
return True
else:
hdf.setValue("%s%s" % (prefix, hdf_node.name()), hdf_node.value())
return False
while node:
if node.name():
new_prefix = prefix + node.name() + '.'
else:
new_prefix = prefix
## as the attribute feature of clearsilver does not work yet, we
## have to rely on magic names to prevent the translation of links
if (new_prefix.endswith(".Link.Rel.") \
or new_prefix.endswith(".Link.Prot.") \
or new_prefix.endswith(".Link.Abs.") \
or new_prefix.endswith(".Link.Attr1.name.") \
or new_prefix.endswith(".Link.Attr1.value.") \
or new_prefix.endswith(".Link.Attr2.name.") \
or new_prefix.endswith(".Link.Attr2.value.")):
pass
elif new_prefix == "Lang.Name.":
# set the "Lang.Name" attribute properly
# remove trailing dot
new_prefix = new_prefix.strip(".")
if language in LANGUAGE_NAMES:
hdf.setValue(new_prefix, LANGUAGE_NAMES[language])
else:
hdf.setValue(new_prefix, language)
else:
if addHdfItem(node):
translate_count += 1
translate_count += walk_hdf(new_prefix, node.child())
node = node.next()
return translate_count
translated_items_count = walk_hdf("", hdf)
## if there was at least one valid translation, then we should write
## the language file
if translated_items_count > 0:
print "Writing translation: %s" % language
hdf.writeFile(new_hdf_file)
else:
print "Skipping empty translation: %s" % language
# ----------------=-=-=- main -=-=-=-----------------------
if __name__ == "__main__":
## the project directory is the parent of the directory of this script
PROJECT_DIR = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]),os.path.pardir))
## ignore subversion, if we are not called from within a working copy
## very useful for the release script (make-tar.sh)
if not os.path.isdir(os.path.join(PROJECT_DIR, ".svn")):
USE_SVN = False
generate_po_files(
os.path.join(PROJECT_DIR, HDF_DIR, DEFAULT_LANG + '.hdf'),
os.path.join(PROJECT_DIR, PO_DIR),
GETTEXT_DOMAIN)
generate_translated_hdf_files(
os.path.join(PROJECT_DIR, HDF_DIR, DEFAULT_LANG + '.hdf'),
os.path.join(PROJECT_DIR, PO_DIR),
os.path.join(PROJECT_DIR, HDF_DIR),
GETTEXT_DOMAIN)

View file

@ -0,0 +1,40 @@
subscribers
list
[part]
address_add
list
[part]
[mailaddress_add]
[mailaddressfile]
address_del
list
[part]
mailaddress_del
list_select
list_delete_ask
list
list_delete_do
list
list_create_ask
list_create_do
list
inlocal
inhost
[options]
[sql]
config_ask
list
[config_subset]
config_do
list
[config_subset]
[options]
textfiles
list
textfile_edit
list
file
textfile_save
list
file
content

View file

@ -0,0 +1,59 @@
ScriptName
LanguageDir
TemplateDir
Stylesheet
HelpIconURL
Config.Title
Config.UI.Languages.[names]
Config.UI.LinkAttrs.web_lang
Config.UI.LinkAttrs.template
Config.Features.Crypto
Config.Features.KeepFiles
Config.Features.LanguageSelect
Config.Features.CharsetSelect
Config.Features.CopyLines
Data.Action
Data.areDefaultTextsAvailable
Data.ErrorMessage
Data.List.Address
Data.List.CharSet
Data.List.CustomizedFiles.*
Data.List.DefaultFiles.*
Data.List.Features.Crypto
Data.List.File.Name
Data.List.File.Content
Data.List.File.isDefault
Data.List.hasPostMod
Data.List.hasRemoteAdmin
Data.List.hasSubMod
Data.List.HeaderAdd
Data.List.HeaderRemove
Data.List.MimeRemove
Data.List.MimeReject
Data.List.MsgSize.Max
Data.List.MsgSize.Min
Data.List.Name
Data.List.PartType
Data.List.PostModPath
Data.List.Options
Data.List.Options.[0-9]
Data.List.Prefix
Data.List.RemoteAdminPath
Data.List.Settings.[0-9].value
Data.List.Settings.[0-9].state
Data.List.SubModPath
Data.List.Subscribers.*
Data.List.TrailingText
Data.List.Type ("default" or "gnupg")
Data.List.WebUsers
Data.Lists.[0-9]+
Data.ListsCount
Data.HostName
Data.Modules.MySQL
Data.Permissions.Create
Data.Permissions.FileUpload
Data.UserName
Data.useCharSet
Data.WebUser.show
Data.WebUser.UserName

View file

@ -0,0 +1,22 @@
1) update version number
* changelog
* README
* ezmlm-web.cgi
* UPGRADING
* debian/changelog.Debian
* debian/control
2) create new tag
3) create tar.gz
./make-tar.sh X.Y.Z
4) create debian package
scripts/debian
scripts/debian check
5) upload debian package
scp XYZ.deb uml-bastelecke@systemausfall.org:/data/deb-repo/incoming/unstable
6) update website

View file

@ -0,0 +1,15 @@
# Makefile to compile the binary suid-wrapper for ezmlm-web
#
# REALINSTALLBIN should be defined in the higher level Makefile
.PHONY: build clean
build:
$(NOECHO) echo "#define EZMLM_WEB_CGI \"$(REALINSTALLBIN)/ezmlm-web.cgi\"" >index.h
$(CC) -o index.cgi index.c
sed 's#^EZMLM_WEB_SUID_WRAPPER=.*$$#EZMLM_WEB_SUID_WRAPPER=$(REALINSTALLBIN)/ezmlm-web.wrapper#' ezmlm-web-make-suid >ezmlm-web-make-suid.configured
clean:
-rm index.cgi ezmlm-web-make-suid.configured
$(NOECHO) echo "#define EZMLM_WEB_CGI \"/usr/bin/ezmlm-web.cgi\"" >index.h

View file

@ -0,0 +1,38 @@
#!/bin/sh
#
# This file is part of ezmlm-web.
#
# it creates user-specific suid binaries for calling ezmlm-web.cgi
#
# parameters: [USERNAME] DESTINATION_FILE
# e.g.: john ~john/public_html/cgi-bin/ezmlm-web
# only root may choose a USERNAME
#
# Copyright (C) 2006-2007, Lars Kruse, All Rights Reserved.
#
# ezmlm-web is distributed under a BSD-style license. Please refer to
# the copyright file included with the release for details.
#
set -eu
EZMLM_WEB_SUID_WRAPPER=/usr/local/bin/ezmlm-web.wrapper
[ $(id -u) -ne 0 ] && [ $# -ne 1 ] && echo "Syntax (for non-root): $(basename $0) DESTINATION_FILE" >&2 && exit 1
[ $(id -u) -eq 0 ] && [ $# -gt 2 -o $# -lt 1 ] && echo "Syntax (for root): $(basename $0) [USERNAME] DESTINATION_FILE" >&2 && exit 1
if [ $# -eq 1 ]
then EZ_USER=$(id -un)
EZ_FILE=$1
else EZ_USER=$1
EZ_FILE=$2
fi
cp "$EZMLM_WEB_SUID_WRAPPER" "$EZ_FILE"
if [ $(id -u) -eq 0 ]
then chown "$EZ_USER". "$EZ_FILE" || { echo "the user '$EZ_USER' does not exist" >&2; rm "$EZ_FILE"; exit 1; }
fi
chmod u+s "$EZ_FILE"
echo "Successfully created '$EZ_FILE' for user '$EZ_USER'."

View file

@ -0,0 +1,38 @@
/* $Id$ */
// define the location of your ezmlm-web.cgi file in this header file
#include "index.h"
#include <stdio.h>
#include <unistd.h>
/* C wrapper to allow ezmlm-web.cgi to run suid */
/* Copyright (C) 1999/2000, Guy Antony Halse, All Rights Reserved */
/* Copyright (C) 02005/02006, Lars Kruse, All Rights Reserved */
/* See the README file in this distribution for copyright information */
int main(void) {
execv(EZMLM_WEB_CGI, NULL);
/* Note that you could also use the following to allow a specific user
to store their mailing lists and configuration file in a different
location. This overrides the default.
ezmlm-web.cgi understands the following parameters:
-C /path/to/config.file
-d /path/to/list/directory
See README for the default values. */
/* 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(EZMLM_WEB_CGI, switches);
*/
}

View file

@ -0,0 +1 @@
#define EZMLM_WEB_CGI "/usr/bin/ezmlm-web.cgi"

View file

@ -0,0 +1,23 @@
<div class="title">
<h1><?cs var:html_escape(Lang.Title.ConfigAdmin) ?></h1>
</div>
<div class="introduction">
<p><?cs var:html_escape(Lang.Introduction.ConfigAdmin) ?></p>
</div>
<fieldset>
<legend><?cs var:html_escape(Lang.Legend.ConfigAdmin) ?> </legend>
<?cs call:form_header("config_admin") ?>
<input type="hidden" name="config_subset" value="admin" />
<?cs call:show_options(UI.Options.Config.Admin) ?>
<ul><li>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
</form>
</fieldset>

View file

@ -0,0 +1,23 @@
<div class="title">
<h1><?cs var:html_escape(Lang.Title.ConfigAll) ?></h1>
</div>
<div class="introduction">
<p><?cs var:html_escape(Lang.Introduction.ConfigAll) ?></p>
</div>
<fieldset>
<legend><?cs var:html_escape(Lang.Legend.ConfigAll) ?> </legend>
<?cs call:form_header("config_all") ?>
<input type="hidden" name="config_subset" value="all" />
<?cs call:show_options(UI.Options.Config.Overview) ?>
<ul><li>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
</form>
</fieldset>

View file

@ -0,0 +1,23 @@
<div class="title">
<h1><?cs var:html_escape(Lang.Title.ConfigArchive) ?></h1>
</div>
<div class="introduction">
<p><?cs var:html_escape(Lang.Introduction.ConfigArchive) ?></p>
</div>
<fieldset>
<legend><?cs var:html_escape(Lang.Legend.ConfigArchive) ?> </legend>
<?cs call:form_header("config_archive") ?>
<input type="hidden" name="config_subset" value="archive" />
<?cs call:show_options(UI.Options.Config.Archive) ?>
<ul><li>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
</form>
</fieldset>

View file

@ -0,0 +1,23 @@
<div class="title">
<h1><?cs var:html_escape(Lang.Title.GnupgOptions) ?></h1>
</div>
<div class="introduction">
<p><?cs var:html_escape(Lang.Introduction.GnupgOptions) ?></p>
</div>
<fieldset>
<legend><?cs var:html_escape(Lang.Legend.GnupgOptions) ?> </legend>
<?cs call:form_header("config_encryption") ?>
<input type="hidden" name="config_subset" value="encryption" />
<?cs call:show_options(UI.Options.Config.GnupgOptions) ?>
<ul><li>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
</form>
</fieldset>

View file

@ -0,0 +1,23 @@
<div class="title">
<h1><?cs var:html_escape(Lang.Title.ConfigMain) ?></h1>
</div>
<div class="introduction">
<p><?cs var:html_escape(Lang.Introduction.ConfigMain) ?></p>
</div>
<fieldset>
<legend><?cs var:html_escape(Lang.Legend.ConfigMain) ?> </legend>
<?cs call:form_header("config_main") ?>
<input type="hidden" name="config_subset" value="main" />
<?cs call:show_options(UI.Options.Config.Main) ?>
<ul><li>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
</form>
</fieldset>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- administrators may edit text files via mail -->
<?cs call:checkbox("n") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- enable remote administration -->
<?cs call:checkbox("r") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- administrators may request subscribers list -->
<?cs call:checkbox("l") ?>

View file

@ -0,0 +1,7 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<?cs if:Data.List.Options.r ?>
<!-- custom path to remote administrators -->
<?cs call:setting("9") ?><?cs
if:((Data.List.Settings.8.state == 1) && (Data.List.Settings.9.state == 1))
?>(<?cs var:html_escape(Lang.Misc.ModSubOverridesRemote) ?>)<?cs /if ?>
<?cs /if ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- configure archive access -->
<?cs call:selection_list("archive") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- block unknown users from archive -->
<?cs call:checkbox("g") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- enable archiving -->
<?cs call:checkbox("a") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- only moderators may access the archive -->
<?cs call:checkbox("b") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- remove 'no-archive' header -->
<?cs call:checkbox("i") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- use deny list -->
<?cs call:checkbox("k") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- only moderators may post -->
<?cs call:checkbox("o") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- block unknown users from archive -->
<?cs call:checkbox("g") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- only subscribers may post -->
<?cs call:checkbox("u") ?>

View file

@ -0,0 +1,9 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- charset -->
<?cs if:Config.Features.CharsetSelect ?>
<?cs if:Data.List.CharSet ?>
<label for="list_charset"><?cs var:html_escape(Lang.Misc.ListCharset)
?>:</label>
<input type="text" name="list_charset" id="list_charset" size="30"
value="<?cs var:Data.List.CharSet ?>" /><?cs /if ?>
<?cs /if ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- require confirmation from poster -->
<?cs call:checkbox("y") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- configure confirmation requirements -->
<?cs call:selection_checkboxes("confirmation") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- do not require confirmation for subscription -->
<?cs call:checkbox("h") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- do not require confirmation for unsubscribe -->
<?cs call:checkbox("j") ?>

View file

@ -0,0 +1,13 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- 'copylines' setting -->
<?cs if:Config.Features.CopyLines ?>
<input type="checkbox" name="copylines_enabled"
value="selected" id="copylines_enabled" <?cs
if:Data.List.CopyLines>0 ?>checked="checked"<?cs /if ?> />
<label for="copylines_enabled"><?cs
var:html_escape(Lang.Misc.CopyLinesEnabled) ?></label>
<ul><li><input type="text" name="copylines" size="10"
style="text-align:right" value="<?cs
alt:Data.List.CopyLines ?>0<?cs /alt ?>" /> <?cs
var:html_escape(Lang.Misc.CopyLinesNumber) ?></li></ul>
<?cs /if ?>

View file

@ -0,0 +1,5 @@
<label for="listaddress"><?cs var:html_escape(Lang.Misc.ListAddress) ?>:</label>
<input type="text" id="listaddress" name="inlocal" size="20"
value="<?cs var:html_escape(Data.LocalPrefix)
?>"> @ <input type="text" name="inhost" size="30" value="<?cs
var:html_escape(Data.HostName) ?>"></li>

View file

@ -0,0 +1,2 @@
<label for="listname"><?cs var:html_escape(Lang.Misc.ListName) ?>:</label>
<input type="text" name="list" id="listname" size="25">

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- turn on digest list -->
<?cs call:checkbox("d") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- digest settings -->
<?cs call:setting("4") ?>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- from address -->
<?cs call:setting("3") ?>

View file

@ -0,0 +1,8 @@
<?cs if:Data.List.Features.Crypto ?>
<!-- comment for the key (second part of the human readable key description) -->
<label for="gnupg_keycomment"><?cs var:html_escape(Lang.Misc.GnupgKeyComment) ?>:</label>
<input type="text" name="gnupg_keycomment" id="gnupg_keycomment" size="25"
value="Mailing list" />
<?cs /if ?>

View file

@ -0,0 +1,15 @@
<?cs if:Data.List.Features.Crypto ?>
<!-- expiration of the key (in years) -->
<label for="gnupg_keyexpires"><?cs var:html_escape(Lang.Misc.GnupgKeyExpires) ?>:</label>
<select name="gnupg_keyexpires" id="gnupg_keyexpires" size="0">
<option value="0" selected="selected"><?cs
var:html_escape(Lang.Misc.Never) ?></option>
<option value="1y">1</option>
<option value="2y">2</option>
<option value="3y">3</option>
<option value="5y">5</option>
<option value="10y">10</option>
</select>
<?cs /if ?>

View file

@ -0,0 +1,8 @@
<?cs if:Data.List.Features.Crypto ?>
<!-- name of the key (first part of the human readable key description) -->
<label for="gnupg_keyname"><?cs var:html_escape(Lang.Misc.GnupgKeyName) ?>:</label>
<input type="text" name="gnupg_keyname" id="gnupg_keyname" size="25"
value="<?cs var:html_escape(Data.List.Name) ?>" />
<?cs /if ?>

View file

@ -0,0 +1,11 @@
<?cs if:Data.List.Features.Crypto ?>
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- length of the key (bytes) -->
<label for="gnupg_keysize"><?cs var:html_escape(Lang.Misc.GnupgKeySize) ?>:</label>
<select name="gnupg_keysize" size="1" id="gnupg_keysize">
<option>1024</option>
<option selected="selected">2048</option>
<option>4096</option>
</select>
<?cs /if ?>

View file

@ -0,0 +1,6 @@
<?cs if:Data.List.Features.Crypto ?>
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- Gnupg: send plaintext if no key is available -->
<?cs call:checkbox("gnupg_plain_without_key") ?>
<?cs /if ?>

View file

@ -0,0 +1,6 @@
<?cs if:Data.List.Features.Crypto ?>
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- Gnupg: sign outgoing messages -->
<?cs call:checkbox("gnupg_sign_messages") ?>
<?cs /if ?>

View file

@ -0,0 +1,5 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- headeradd -->
<?cs var:html_escape(Lang.Misc.HeaderAdd) ?>:<br/>
<ul><li><textarea name="headeradd" rows="5" cols="70"><?cs
var:html_escape(Data.List.HeaderAdd) ?></textarea></li></ul>

View file

@ -0,0 +1,31 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- headerfilter -->
<?cs if:Config.Features.KeepFiles ?>
<?cs var:html_escape(Lang.Misc.HeaderFiltering) ?>:
<ul>
<li><input type="radio" name="headerfilter_action" value="remove"
id="hf_remove"<?cs if:Data.List.HeaderRemove
?> checked="checked"<?cs /if ?> /><label for="hf_remove"><?cs
var:html_escape(Lang.Misc.HeaderRemove) ?></label></li>
<li><input type="radio" name="headerfilter_action" value="keep"
id="hf_keep"<?cs if:Data.List.HeaderKeep
?> checked="checked"<?cs /if ?> /><label for="hf_keep"><?cs
var:html_escape(Lang.Misc.HeaderKeep) ?></label></li>
<li>
<textarea name="headerfilter" rows="5" cols="70"><?cs
if Data.List.HeaderRemove ?><?cs
var:html_escape(Data.List.HeaderRemove) ?><?cs else ?><?cs
var:html_escape(Data.List.HeaderKeep) ?><?cs /if ?></textarea></li>
</ul>
<?cs else ?>
<?cs var:html_escape(Lang.Misc.HeaderFiltering) ?>:
<?cs var:html_escape(Lang.Misc.HeaderRemove) ?>
<input type="hidden" name="headerfilter_action" value="remove" />
<ul>
<li>
<textarea name="headerfilter" rows="5" cols="70"><?cs
if Data.List.HeaderRemove ?><?cs
var:html_escape(Data.List.HeaderRemove) ?><?cs else ?><?cs
var:html_escape(Data.List.HeaderKeep) ?><?cs /if ?></textarea></li>
</ul>
<?cs /if ?>

View file

@ -0,0 +1,25 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- list language -->
<?cs if:Config.Features.LanguageSelect ?>
<?cs if:Data.Action != "list_create" ?>
<?cs if:subcount(Data.List.AvailableLanguages) > 0 ?>
<label for="list_language"><?cs var:html_escape(Lang.Misc.ListLanguage)
?>:</label>
<select name="list_language" id="list_language">
<?cs each:item = Data.List.AvailableLanguages ?>
<option <?cs if:(item == Data.List.Language)
?>selected="selected"<?cs /if ?>><?cs var:item
?></option><?cs /each ?>
</select><?cs /if ?>
<?cs else ?>
<?cs if:subcount(Data.AvailableLanguages) > 0 ?>
<label for="list_language"><?cs var:html_escape(Lang.Misc.ListLanguage)
?>:</label>
<select name="list_language" id="list_language">
<?cs each:item = Data.AvailableLanguages ?>
<option <?cs if:item == "default"
?>selected="selected"<?cs /if ?>><?cs var:item
?></option><?cs /each ?>
</select><?cs /if ?>
<?cs /if ?>
<?cs /if ?>

Some files were not shown because too many files have changed in this diff Show more