support for a prefix of the local part of mailing list addresses

unified form headers
This commit is contained in:
lars 2007-04-01 23:42:36 +00:00
parent 3958224115
commit 94006f8e6b
25 changed files with 76 additions and 104 deletions

View file

@ -4,12 +4,13 @@ Version 3.2 - 04/14/02006
* support for multi-domain setups
* detect preferred interface language
* user-specific interface language selection
* handling of empty settings for ezmlm-idx 5.0 fixed (closes #21)
* support for listing of subscription log
* a prefix for the local part of mailing list addresses is now configurable
* 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
* the formerly required module "Encode" is now optional
* support for listing of subscription log
Version 3.1.4 - 03/26/02006
* new setting: DOTQMAIL_DIR (useful for multi domain vpopmail setups)

View file

@ -33,7 +33,7 @@ $LIST_DIR = "$HOME_DIR/lists";
# Where is the webusers file for access-permissions
# defaults to "$LIST_DIR/webusers"
$WEBUSERS_FILE = "$LIST_DIR/webusers";
#$WEBUSERS_FILE = "$LIST_DIR/webusers";
# Where are the language files
# usually something like /usr/local/share/ezmlm-web/lang
@ -57,6 +57,10 @@ $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;

View file

@ -10,7 +10,7 @@
# 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 and $MAILDOMAIN settings.
# $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.
@ -29,14 +29,13 @@
foo => {
name => "Example Domain Foo",
list_dir => "/data/lists/foo",
dot_dir => "/data/lists/foo",
mail_domain => "lists.foo.org",
},
bar => {
name => "Example Domain Bar",
list_dir => "/data/lists/bar",
dot_dir => "/data/lists/bar",
dot_dir => "/var/vpopmail/lists/bar",
mail_domain => "lists.bar.org",
mail_prefix => "lists-",
},
);
@ -49,6 +48,8 @@ if (defined($CURRENT_DOMAIN) && defined($DOMAINS{$CURRENT_DOMAIN})) {
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

@ -22,7 +22,6 @@ use CGI;
use IO::File;
use POSIX;
use English;
# TODO: uncomment it later
use Time::localtime ();
# gettext support is optional
@ -77,7 +76,7 @@ use vars qw[$DEFAULT_OPTIONS $UNSAFE_RM $ALIAS_USER $LIST_DIR];
use vars qw[$QMAIL_BASE $PRETTY_NAMES $DOTQMAIL_DIR];
use vars qw[$FILE_UPLOAD $WEBUSERS_FILE $MAIL_DOMAIN $HTML_TITLE];
use vars qw[$HTML_CSS_FILE $TEMPLATE_DIR $LANGUAGE_DIR $HTML_LANGUAGE];
use vars qw[$DEFAULT_HOST];
use vars qw[$DEFAULT_HOST $MAIL_ADDRESS_PREFIX];
# some settings for encrypted mailing lists
use vars qw[$GPG_SUPPORT];
# settings for multi-domain setups
@ -606,7 +605,7 @@ sub set_pagedata_domains {
my ($domain_name);
# multi-domain setup?
if (defined($CURRENT_DOMAIN)) {
if (defined($CURRENT_DOMAIN) && ($CURRENT_DOMAIN ne '')) {
$pagedata->setValue("Config.UI.LinkAttrs.domain", $CURRENT_DOMAIN);
$pagedata->setValue("Data.CurrentDomain", $CURRENT_DOMAIN);
$pagedata->setValue("Data.CurrentDomain.Description",
@ -674,6 +673,11 @@ sub set_pagedata {
$username = "$USER-" if ($USER ne $ALIAS_USER);
$hostname = $DEFAULT_HOST;
}
# maybe a local prefix was configured?
if (defined($MAIL_ADDRESS_PREFIX)) {
$username = $MAIL_ADDRESS_PREFIX;
}
$pagedata->setValue("Data.UserName", "$username");
$pagedata->setValue("Data.HostName", "$hostname");

View file

@ -9,14 +9,11 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigAdmin) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("config_admin", "") ?>
<input type="hidden" name="config_subset" value="admin" />
<?cs call:show_options(UI.Options.Config.Admin) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>

View file

@ -9,14 +9,11 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigAll) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("config_all", "") ?>
<input type="hidden" name="config_subset" value="all" />
<?cs call:show_options(UI.Options.Config.Overview) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>

View file

@ -9,14 +9,11 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigArchive) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("config_archive", "") ?>
<input type="hidden" name="config_subset" value="archive" />
<?cs call:show_options(UI.Options.Config.Archive) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>

View file

@ -9,14 +9,11 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.GnupgOptions) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("config_encryption", "") ?>
<input type="hidden" name="config_subset" value="encryption" />
<?cs call:show_options(UI.Options.Config.GnupgOptions) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>

View file

@ -9,14 +9,11 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigMain) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("config_main", "") ?>
<input type="hidden" name="config_subset" value="main" />
<?cs call:show_options(UI.Options.Config.Main) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>

View file

@ -9,17 +9,15 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigPosting) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("config_posting", "") ?>
<input type="hidden" name="config_subset" value="posting" />
<?cs call:show_options(UI.Options.Config.Posting) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
</form>
</fieldset>

View file

@ -9,14 +9,11 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigProcess) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("config_processing") ?>
<input type="hidden" name="config_subset" value="processing" />
<?cs call:show_options(UI.Options.Config.Processing) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
@ -24,3 +21,4 @@
</fieldset>
<?cs include:TemplateDir + '/help_tag_susbtitution.cs' ?>

View file

@ -9,14 +9,11 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigSub) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("config_subscription") ?>
<input type="hidden" name="config_subset" value="subscription" />
<?cs call:show_options(UI.Options.Config.Subscription) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>

View file

@ -1,4 +0,0 @@
<!-- this file should be included in every form with checkboxes and settings -->
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />

View file

@ -9,8 +9,7 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.GnupgConvert) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />
<?cs call:form_header("gnupg_convert", "") ?>
<?cs if:Data.List.Features.Crypto
?><button type="submit" name="send" value="do"><?cs
var:html_escape(Lang.Buttons.GnupgConvertToPlain) ?></button>

View file

@ -9,15 +9,12 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.GnupgGenerateKey) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("gnupg_generate_key", "") ?>
<input type="hidden" name="gnupg_subset" value="generate_key" />
<?cs call:show_options(UI.Options.GenerateKey) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="gnupg_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.GnupgGenerateKey) ?></button>
</form>

View file

@ -1,15 +1,11 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.GnupgKeyImport) ?> </legend>
<!-- this form has to be "multipart/form-data" to make file upload work -->
<form method="post" action="<?cs call:link("","","","","","") ?>"
enctype="multipart/form-data">
<?cs call:form_header_upload("gnupg_key_upload") ?>
<input type="hidden" name="gnupg_subset" value="<?cs
if:Data.Action == 'gnupg_public' ?>public<?cs
else ?>secret<?cs /if ?>" />
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />
<ul>
<li><?cs var:html_escape(Lang.Misc.GnupgImportKey) ?>
<ul><li><input type="file" name="gnupg_key_file" size="50"
@ -18,9 +14,6 @@
</li>
<li>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="gnupg_do" />
<button type="submit" name="send" value="do"><?cs
var:html_escape(Lang.Buttons.GnupgImportKey) ?></button>

View file

@ -13,8 +13,7 @@
<?cs if:subcount(Data.List.gnupg_keys.public) > 0 ?>
<form method="post" action="<?cs call:link("","","","","","") ?>"
enctype="application/x-www-form-urlencoded">
<?cs call:form_header("gnupg_public_keys", "") ?>
<input type="hidden" name="gnupg_subset" value="public" />
<table class="gnupg_keys">
@ -39,9 +38,6 @@
<?cs /each ?>
</table>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="gnupg_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.DeletePublicKey) ?></button>

View file

@ -13,8 +13,7 @@
<?cs if:subcount(Data.List.gnupg_keys.secret) > 0 ?>
<form method="post" action="<?cs call:link("","","","","","") ?>"
enctype="application/x-www-form-urlencoded">
<?cs call:form_header("gnupg_secret_keys") ?>
<input type="hidden" name="gnupg_subset" value="secret" />
<table class="gnupg_keys">
@ -39,9 +38,6 @@
<?cs /each ?>
</table>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="gnupg_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.DeleteSecretKey) ?></button>

View file

@ -1,13 +1,10 @@
<!-- allows the user to change the interface language (not of the list!) -->
<?cs if:subcount(Config.UI.Languages) > 0 ?>
<form class="select" method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("select_language", "web_lang") ?>
<?cs if:Data.List.Name ?><input type="hidden" name="list" value="<?cs
var:Data.List.Name ?>" />
<input type="hidden" name="action" value="subscribers" /><?cs /if ?>
<?cs if:Data.CurrentDomain ?><input type="hidden" name="domain" value="<?cs
var:Data.CurrentDomain ?>" /><?cs /if ?>
<?cs if:Data.List.Name ?><input type="hidden" name="action"
value="subscribers" /><?cs /if ?>
<font class="no_link"><?cs
var:html_escape(Lang.Menue.Language) ?>:</font><br/>

View file

@ -5,15 +5,13 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ListCreate) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("list_create", "") ?>
<?cs call:show_options(UI.Options.Create) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="list_create_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.Create) ?></button>
</form>
</fieldset>

View file

@ -10,9 +10,7 @@
<legend><?cs var:html_escape(Lang.Legend.ListDelete) ?> </legend>
<p><?cs var:html_escape(Lang.Misc.ConfirmDelete) ?></p>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />
<?cs call:form_header("delete_list_confirm", "") ?>
<input type="hidden" name="action" value="list_delete_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.ConfirmDeletion) ?></button>
</form>

View file

@ -96,5 +96,33 @@ def:link(attr1, value1, attr2, value2, attr3, value3)
?><?cs /if
?><?cs /each
?><?cs /if ?><?cs
/def ?><?cs
def:form_header_generic(form_name, ignore_attr, enctype)
?><?cs # somehow perl's CGI has problems to evaluate the querystring of a
form action - thus we have to use hidden input fields instead
?><form accept-charset="utf-8" name="<?cs var:html_escape(form_name)
?>" method="post" action="<?cs var:ScriptName
?>" enctype="<?cs var:enctype ?>">
<?cs each:attr = Config.UI.LinkAttrs ?><?cs
if:name(attr) != ignore_attr ?><input type="hidden" name="<?cs
var:html_escape(name(attr)) ?>" value="<?cs
var:html_escape(attr) ?>" /><?cs /if ?>
<?cs /each ?><?cs
if:Data.List.Name ?><input type="hidden" name="list" value="<?cs
var:html_escape(Data.List.Name) ?>" /><?cs /if ?><?cs
/def ?><?cs
def:form_header(form_name, ignore_attr)
?><?cs call:form_header_generic(form_name, ignore_attr,
"application/x-www-form-urlencoded") ?><?cs
/def ?><?cs
def:form_header_upload(form_name, ignore_attr)
?><?cs call:form_header_generic(form_name, ignore_attr,
"multipart/form-data") ?><?cs
/def ?>

View file

@ -36,7 +36,7 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.RelevantOptions) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:form_header("config_subscription", "") ?>
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
@ -48,11 +48,7 @@
<?cs call:show_options(UI.Options.Subscribers.Moderators) ?>
<?cs /if ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="config_subset" value="RESERVED-subscribers" />
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
</form>
@ -79,8 +75,7 @@
<table class="subscribers"><tr>
<?cs if:subcount(Data.List.Subscribers) > 0 ?>
<td><form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />
<td><?cs call:form_header("remove_subscriber", "") ?>
<?cs if:Data.List.PartType ?>
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
<?cs /if ?>
@ -102,10 +97,7 @@
<li><?cs var:subcount(Data.List.Subscribers) ?> <?cs var:html_escape(Lang.Misc.Subscribers) ?></li>
<li><input type="hidden" name="action" value="address_del" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.DeleteAddress) ?></button></form></li>
<li><form method="post" action="<?cs call:link('','','','','','')
?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="list" value="<?cs
var:Data.List.Name ?>" />
<li><?cs call:form_header("download_subscribers", "") ?>
<input type="hidden" name="action" value="download_subscribers" />
<?cs if:Data.List.PartType ?>
<input type="hidden" name="part" value="<?cs
@ -116,9 +108,7 @@
</ul></td>
<?cs /if ?>
<td><form method="post" action="<?cs call:link("","","","","","") ?>" enctype="multipart/form-data">
<!-- this form has to be "multipart/form-data" to make file upload work -->
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />
<td><?cs call:form_header_upload("upload_subscribers", "") ?>
<?cs if:Data.List.PartType ?>
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
<?cs /if ?>

View file

@ -16,8 +16,7 @@
<?cs var:html_escape(Lang.Introduction.ResetTextFile) ?>
</div>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>">
<?cs call:form_header("textfile_reset", "") ?>
<input type="hidden" name="file" value="<?cs var:Data.List.File.Name ?>">
<input type="hidden" name="action" value="textfile_reset" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.ResetFile) ?></button>
@ -29,8 +28,7 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.TextFileEdit) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>">
<?cs call:form_header("textfile_reset", "") ?>
<input type="hidden" name="file" value="<?cs var:Data.List.File.Name ?>">
<p><textarea name="content" rows="13"

View file

@ -9,9 +9,7 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.TextFiles) ?> </legend>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />
<?cs call:form_header("select_textfile", "") ?>
<ul>
<?cs if:subcount(Data.List.CustomizedFiles) +
subcount(Data.List.DefaultFiles) > 0 ?>