* Tue Dec 03 2024 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.1-1.sme
- initial release of smeserver-mini-qmail from former smeserver-qmail . only for final delivery or forward behind qpsmtpd and postfix . set /var/qmail/control/qmqpservers server file . set junkmail delivery to dovecot-lda . we only need configs idhost, qmqpservers, me, defaultdomain, plusdomain, rcpthosts . removing controls badrcptto,helohost,smtproutes,rcpthosts,badmailfrom,databytes,bouncefrom, bouncehost,concurrencylocal,concurrencyremote,doublebouncehost,doublebounceto,envnoathost . removing /var/qmail/users . removing alias . cleaning actions scripts (TODO: move pseudonym-cleanup to smeserver-email)
This commit is contained in:
parent
3e0f7d433c
commit
89566576f1
20
README.md
20
README.md
@ -14,12 +14,24 @@ Show list of outstanding bugs:
|
|||||||
[In progress](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=IN_PROGRESS&cf_package=smeserver-mini-qmail&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
[In progress](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=IN_PROGRESS&cf_package=smeserver-mini-qmail&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
||||||
[Resolved](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=RESOLVED&cf_package=smeserver-mini-qmail&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
[Resolved](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=RESOLVED&cf_package=smeserver-mini-qmail&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
||||||
[Verified](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=VERIFIED&cf_package=smeserver-mini-qmail&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
[Verified](https://bugs.koozali.org/buglist.cgi?action=wrap&bug_status=VERIFIED&cf_package=smeserver-mini-qmail&classification=SME+Server&order=changeddate+DESC%2Ccomponent%2Cpriority%2Cbug_severity&query_format=advanced)
|
||||||
And a list of outstanding Legacy bugs: (e-smith-qmail) [here](https://bugs.koozali.org/buglist.cgi?component=e-smith-qmail&product=SME%20Server%2010.X&query_format=advanced&limit=0&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=CONFIRMED)
|
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
<br />*This description has been generated by an LLM AI system and cannot be relied on to be fully correct.*
|
|
||||||
*Once it has been checked, then this comment will be deleted*
|
|
||||||
<br />
|
|
||||||
smeserver-mini-qmail is wrapper to configure qmail for final deivery only and send external email to a qmp server handle by another service.
|
smeserver-mini-qmail is wrapper to configure qmail for final deivery only and send external email to a qmp server handle by another service.
|
||||||
qmail is an open source email server software designed to facilitate email communication for small- and medium-sized businesses. It is highly customizable, with support for multiple domains, virtual domains, forwarding, aliases, and mailing lists, and its features can be adapted to meet the specific communication needs of any organization. With its straightforward web-based administration interface, smeserver-mini-qmail can be easily configured for optimal security and performance. Additionally, its advanced spam filtering technology helps to ensure that email communication remains safe and secure for both senders and recipients.
|
qmail is an open source email server software designed to facilitate email communication for small- and medium-sized businesses. It is highly customizable, with support for multiple domains, virtual domains, forwarding, aliases, and mailing lists, and its features can be adapted to meet the specific communication needs of any organization. With its straightforward web-based administration interface, smeserver-mini-qmail can be easily configured for optimal security and performance. Additionally, its advanced spam filtering technology helps to ensure that email communication remains safe and secure for both senders and recipients.
|
||||||
|
|
||||||
|
the mini-qmail configuration with extra qmail-local support only serves for final delivery and forward to a qmqp server.
|
||||||
|
|
||||||
|
## properties available
|
||||||
|
$qmail{DeliveryType}
|
||||||
|
$qmail{DeliveryInstruction}
|
||||||
|
$props{Filter} ||= 'yes';
|
||||||
|
$props{EmailForward} ||= 'local'
|
||||||
|
$props{EmailForward} =~ /^(forward|both)$/
|
||||||
|
$props{ForwardAddress}
|
||||||
|
$prop{'EveryoneEmail'}
|
||||||
|
$EmailUnknownUser
|
||||||
|
|
||||||
|
## Sources to adapt this package
|
||||||
|
* http://cr.yp.to/qmail/mini.html
|
||||||
|
* https://johnleach.co.uk/documents/qmail-to-postfix/
|
||||||
|
110
createlinks
110
createlinks
@ -4,28 +4,15 @@ use esmith::Build::CreateLinks qw(:all);
|
|||||||
use File::Basename;
|
use File::Basename;
|
||||||
use File::Path;
|
use File::Path;
|
||||||
|
|
||||||
# email-conf - console-save, bootstrap-console-save, domain-create, domain-delete,
|
|
||||||
# ip-change, email-update, host-create, host-delete, host-modify, post-upgrade
|
|
||||||
# rcpthosts template was in smeserver qpsmtpd, and not used if qpsmtpd in use anymore
|
|
||||||
|
|
||||||
foreach (qw(
|
foreach (qw(
|
||||||
badmailfrom
|
|
||||||
badrcptto
|
|
||||||
bouncefrom
|
|
||||||
bouncehost
|
|
||||||
concurrencylocal
|
|
||||||
concurrencyremote
|
|
||||||
databytes
|
|
||||||
defaultdomain
|
defaultdomain
|
||||||
defaulthost
|
defaulthost
|
||||||
doublebounceto
|
idhost
|
||||||
envnoathost
|
|
||||||
helohost
|
|
||||||
locals
|
locals
|
||||||
me
|
me
|
||||||
plusdomain
|
plusdomain
|
||||||
rcpthosts
|
qmqpservers
|
||||||
smtproutes
|
|
||||||
virtualdomains
|
virtualdomains
|
||||||
))
|
))
|
||||||
{
|
{
|
||||||
@ -45,41 +32,6 @@ foreach (qw(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
templates2events("/var/qmail/control/badrcptto", qw(
|
|
||||||
user-create
|
|
||||||
user-delete
|
|
||||||
user-modify
|
|
||||||
group-create
|
|
||||||
group-delete
|
|
||||||
group-modify
|
|
||||||
pseudonym-create
|
|
||||||
pseudonym-delete
|
|
||||||
pseudonym-modify
|
|
||||||
));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foreach (qw(
|
|
||||||
/var/qmail/alias/.qmail-default
|
|
||||||
/var/qmail/alias/.qmail-localdelivery-default
|
|
||||||
))
|
|
||||||
{
|
|
||||||
templates2events($_, qw(
|
|
||||||
console-save
|
|
||||||
bootstrap-console-save
|
|
||||||
domain-create
|
|
||||||
domain-delete
|
|
||||||
ip-change
|
|
||||||
email-update
|
|
||||||
host-create
|
|
||||||
host-delete
|
|
||||||
host-modify
|
|
||||||
post-upgrade
|
|
||||||
smeserver-mini-qmail-update
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
templates2events("/var/qmail/alias/.qmail-shared" , qw(bootstrap-console-save user-create user-modify user-delete));
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for console-save event:
|
# actions for console-save event:
|
||||||
@ -87,12 +39,6 @@ templates2events("/var/qmail/alias/.qmail-shared" , qw(bootstrap-console-save us
|
|||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
$event = "console-save";
|
$event = "console-save";
|
||||||
|
|
||||||
# If qmail-send is running, it will receive the SIGHUP and ignore the
|
|
||||||
# start command. If it is not running then the signal will be ignored
|
|
||||||
# and qmail-send will read its new configuration files anyway.
|
|
||||||
|
|
||||||
safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for bootstrap-console-save event:
|
# actions for bootstrap-console-save event:
|
||||||
# write config files and create startup link
|
# write config files and create startup link
|
||||||
@ -100,10 +46,7 @@ safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|||||||
$event = "bootstrap-console-save";
|
$event = "bootstrap-console-save";
|
||||||
|
|
||||||
event_link("pseudonym-cleanup", $event, "03");
|
event_link("pseudonym-cleanup", $event, "03");
|
||||||
event_link("qmail-update-group", $event, "20");
|
|
||||||
event_link("qmail-update-user", $event, "55");
|
event_link("qmail-update-user", $event, "55");
|
||||||
templates2events("/var/qmail/users/assign", $event);
|
|
||||||
safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55email-assign");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for domain-create event:
|
# actions for domain-create event:
|
||||||
@ -111,25 +54,12 @@ safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55ema
|
|||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
$event = "domain-create";
|
$event = "domain-create";
|
||||||
|
|
||||||
# If qmail-send is running, it will receive the SIGHUP and ignore the
|
|
||||||
# start command. If it is not running then the signal will be ignored
|
|
||||||
# and qmail-send will read its new configuration files anyway.
|
|
||||||
|
|
||||||
safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for domain-delete event:
|
# actions for domain-delete event:
|
||||||
# rewrite config files and restart server
|
# rewrite config files and restart server
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
$event = "domain-delete";
|
$event = "domain-delete";
|
||||||
|
|
||||||
|
|
||||||
# If qmail-send is running, it will receive the SIGHUP and ignore the
|
|
||||||
# start command. If it is not running then the signal will be ignored
|
|
||||||
# and qmail-send will read its new configuration files anyway.
|
|
||||||
|
|
||||||
safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for email-update event:
|
# actions for email-update event:
|
||||||
# email parameters have been changed in the e-smith
|
# email parameters have been changed in the e-smith
|
||||||
@ -142,24 +72,12 @@ $event = "email-update";
|
|||||||
event_link("qmail-update-user", $event, "03");
|
event_link("qmail-update-user", $event, "03");
|
||||||
event_link("pseudonym-cleanup", $event, "30");
|
event_link("pseudonym-cleanup", $event, "30");
|
||||||
|
|
||||||
# If qmail-send is running, it will receive the SIGHUP and ignore the
|
|
||||||
# start command. If it is not running then the signal will be ignored
|
|
||||||
# and qmail-send will read its new configuration files anyway.
|
|
||||||
|
|
||||||
safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|
||||||
safe_symlink("adjust", "root/etc/e-smith/events/$event/services2adjust/masq");
|
|
||||||
safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/smtp-auth-proxy");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for group-create event:
|
# actions for group-create event:
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
$event = "group-create";
|
$event = "group-create";
|
||||||
|
|
||||||
event_link("pseudonym-cleanup", $event, "03");
|
event_link("pseudonym-cleanup", $event, "03");
|
||||||
event_link("qmail-update-group", $event, "20");
|
|
||||||
templates2events("/var/qmail/users/assign", $event);
|
|
||||||
safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55email-assign");
|
|
||||||
safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for group-delete event:
|
# actions for group-delete event:
|
||||||
@ -167,10 +85,6 @@ safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|||||||
$event = "group-delete";
|
$event = "group-delete";
|
||||||
|
|
||||||
event_link("pseudonym-cleanup", $event, "03");
|
event_link("pseudonym-cleanup", $event, "03");
|
||||||
event_link("qmail-delete-group", $event, "20");
|
|
||||||
templates2events("/var/qmail/users/assign", $event);
|
|
||||||
safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55email-assign");
|
|
||||||
safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for group-modify event:
|
# actions for group-modify event:
|
||||||
@ -178,10 +92,6 @@ safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|||||||
$event = "group-modify";
|
$event = "group-modify";
|
||||||
|
|
||||||
event_link("pseudonym-cleanup", $event, "03");
|
event_link("pseudonym-cleanup", $event, "03");
|
||||||
event_link("qmail-update-group", $event, "20");
|
|
||||||
templates2events("/var/qmail/users/assign", $event);
|
|
||||||
safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55email-assign");
|
|
||||||
safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for user-create event:
|
# actions for user-create event:
|
||||||
@ -189,7 +99,6 @@ safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|||||||
$event = "user-create";
|
$event = "user-create";
|
||||||
|
|
||||||
event_link("qmail-update-user", $event, "20");
|
event_link("qmail-update-user", $event, "20");
|
||||||
event_link("qmail-update-group", $event, "20");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for user-modify event
|
# actions for user-modify event
|
||||||
@ -197,7 +106,6 @@ event_link("qmail-update-group", $event, "20");
|
|||||||
$event = "user-modify";
|
$event = "user-modify";
|
||||||
|
|
||||||
event_link("qmail-update-user", $event, "20");
|
event_link("qmail-update-user", $event, "20");
|
||||||
event_link("qmail-update-group", $event, "20");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for user-modify-admin event
|
# actions for user-modify-admin event
|
||||||
@ -211,30 +119,20 @@ event_link("qmail-update-user", $event, "20");
|
|||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
$event = "user-delete";
|
$event = "user-delete";
|
||||||
|
|
||||||
event_link("qmail-update-group", $event, "25");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for ip-up event:
|
# actions for ip-up event:
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
$event = "ip-up";
|
$event = "ip-up";
|
||||||
|
|
||||||
event_link("qmail-ipup", $event, "20");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for ip-change event:
|
# actions for ip-change event:
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
$event = "ip-change";
|
$event = "ip-change";
|
||||||
|
|
||||||
safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
# actions for smeserver-mini-qmail-update event:
|
# actions for smeserver-mini-qmail-update event:
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
$event = "smeserver-mini-qmail-update";
|
$event = "smeserver-mini-qmail-update";
|
||||||
|
|
||||||
safe_symlink("restart", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|
||||||
event_link("systemd-reload", $event, "89");
|
|
||||||
event_link("systemd-default", $event, "88");
|
|
||||||
event_link("pseudonym-cleanup", $event, "03");
|
event_link("pseudonym-cleanup", $event, "03");
|
||||||
|
|
||||||
#--------------------------------------------------
|
#--------------------------------------------------
|
||||||
@ -246,11 +144,7 @@ foreach $event ( qw(pseudonym-create pseudonym-modify pseudonym-delete
|
|||||||
{
|
{
|
||||||
event_link("pseudonym-cleanup", $event, "03");
|
event_link("pseudonym-cleanup", $event, "03");
|
||||||
templates2events("/var/qmail/control/virtualdomains", $event);
|
templates2events("/var/qmail/control/virtualdomains", $event);
|
||||||
templates2events("/var/qmail/users/assign", $event);
|
|
||||||
safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55email-assign");
|
|
||||||
safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
safe_symlink(".qmail", "root/home/e-smith/.qmail-default");
|
safe_symlink(".qmail", "root/home/e-smith/.qmail-default");
|
||||||
safe_symlink(".qmail-shared", "root/var/qmail/alias/.qmail-shared-default");
|
|
||||||
|
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
#!/usr/bin/perl -w
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
# copyright (C) 1999-2005 MItel Networks Corporation
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
|
|
||||||
package esmith;
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use Errno;
|
|
||||||
|
|
||||||
my $event = $ARGV [0];
|
|
||||||
my $groupName = $ARGV [1];
|
|
||||||
|
|
||||||
die "Groupname argument missing." unless defined ($groupName);
|
|
||||||
|
|
||||||
$groupName =~ s/\./:/g;
|
|
||||||
unlink "/var/qmail/alias/.qmail-$groupName";
|
|
||||||
unlink "/var/qmail/alias/.qmail-$groupName-default";
|
|
||||||
|
|
||||||
exit (0);
|
|
@ -1,26 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
# copyright (C) 2001-2006 Mitel Networks Corporation
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
#------------------------------------------------------------
|
|
||||||
# Reset qmail TCP timeouts, and tell qmail-send to retry sending
|
|
||||||
#------------------------------------------------------------
|
|
||||||
|
|
||||||
/var/qmail/bin/qmail-tcpok
|
|
||||||
exec sv alarm /service/qmail
|
|
@ -1,112 +0,0 @@
|
|||||||
#!/usr/bin/perl -w
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
# copyright (C) 2002-2006 Mitel Networks Corporation
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
|
|
||||||
package esmith;
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use Errno;
|
|
||||||
use esmith::ConfigDB;
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
use esmith::util;
|
|
||||||
|
|
||||||
my $c = esmith::ConfigDB->open_ro || die "Couldn't open config db\n";
|
|
||||||
my $a = esmith::AccountsDB->open_ro || die "Couldn't open accounts db\n";
|
|
||||||
|
|
||||||
my $event = $ARGV [0] || die "Event name arg missing\n";;
|
|
||||||
my @groups;
|
|
||||||
|
|
||||||
if (scalar @ARGV)
|
|
||||||
{
|
|
||||||
@groups = map { $a->get($_); } @ARGV;
|
|
||||||
foreach my $g (@groups)
|
|
||||||
{
|
|
||||||
my $type = $g->prop('type');
|
|
||||||
if ($type =~ /^user/)
|
|
||||||
{
|
|
||||||
# That's fine. We were probably just called from the user-delete
|
|
||||||
# event, in which case we want to update all of the groups. So, leave
|
|
||||||
# the groups array empty.
|
|
||||||
@groups = ();
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
elsif ($type !~ /^group/){
|
|
||||||
die "Expected a user or a group. Got neither: $type\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Regenerate all the groups if the previous block failed in some way.
|
|
||||||
unless (@groups)
|
|
||||||
{
|
|
||||||
@groups = $a->groups;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach my $group (@groups)
|
|
||||||
{
|
|
||||||
my $groupName = $group->key;
|
|
||||||
unless ($group->prop('type') eq 'group')
|
|
||||||
{
|
|
||||||
warn "Account $groupName is not a group account.\n";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
my %properties = $group->props;
|
|
||||||
$groupName =~ s/\./:/g;
|
|
||||||
my $group = "/var/qmail/alias/.qmail-$groupName";
|
|
||||||
my @group_members = split(/,/, $properties{Members});
|
|
||||||
# Check if we should exclude members from this group email address
|
|
||||||
my @exclude_users = split(/,/, ($properties{EmailExcludeUsers} || ''));
|
|
||||||
my @exclude_groups = split(/,/, ($properties{EmailExcludeGroups} || ''));
|
|
||||||
foreach my $exclude_group (@exclude_groups){
|
|
||||||
my $g = $a->get($exclude_group);
|
|
||||||
next unless $g;
|
|
||||||
push @exclude_users, split(/,/, ($g->prop('Members') || ''));
|
|
||||||
}
|
|
||||||
my %exclude = map { $_, 1 } @exclude_users;
|
|
||||||
@exclude_users = keys %exclude;
|
|
||||||
my @members = ();
|
|
||||||
foreach my $user (@group_members){
|
|
||||||
next if grep { $_ eq $user } @exclude_users;
|
|
||||||
push @members, $user;
|
|
||||||
}
|
|
||||||
my $members = join(',', @members);
|
|
||||||
|
|
||||||
esmith::util::processTemplate(
|
|
||||||
{
|
|
||||||
CONFREF =>
|
|
||||||
{
|
|
||||||
Members => $members,
|
|
||||||
},
|
|
||||||
|
|
||||||
TEMPLATE_PATH =>
|
|
||||||
"/var/qmail/alias/.qmail-group",
|
|
||||||
|
|
||||||
OUTPUT_FILENAME => "/var/qmail/alias/.qmail-$groupName",
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
unless (-f "/var/qmail/alias/.qmail-$groupName-default")
|
|
||||||
{
|
|
||||||
symlink "/var/qmail/alias/.qmail-$groupName",
|
|
||||||
"/var/qmail/alias/.qmail-$groupName-default";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
exit (0);
|
|
@ -1,2 +1,3 @@
|
|||||||
| [ -d ./Maildir/.junkmail/ ] || /var/qmail/bin/maildirmake ./Maildir/.junkmail/
|
| [ -d ./Maildir/.junkmail/ ] || /var/qmail/bin/maildirmake ./Maildir/.junkmail/
|
||||||
|
| /var/qmail/bin/preline -f /usr/libexec/dovecot/dovecot-lda -a "$RECIPIENT" -d "$USER" -m "junkmail" ; if [ $? -ne 0 ] ; then exit -1; else exit 99; fi;
|
||||||
./Maildir/.junkmail/
|
./Maildir/.junkmail/
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
($EmailUnknownUser eq "returntosender") ?
|
|
||||||
"| bouncesaying 'Recipient unknown'" :
|
|
||||||
"$EmailUnknownUser";
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
# Generic template to rebuild any .qmail-groupname file. Expects
|
|
||||||
# to be called with a CONFREF containing the group members.
|
|
||||||
$OUT .= join("\n", map { '&' . $_ } split(/,/, $Members));
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
| forward $DEFAULT@{"$SystemName.$DomainName"}
|
|
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
my $a = esmith::AccountsDB->open_ro;
|
|
||||||
|
|
||||||
$OUT = '';
|
|
||||||
|
|
||||||
for my $user ( $a->get('admin'), $a->users )
|
|
||||||
{
|
|
||||||
next if ( ($user->prop('EveryoneEmail') || 'yes') eq 'no');
|
|
||||||
|
|
||||||
$OUT .= '&' . $user->key . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,2 +0,0 @@
|
|||||||
#spamer@spamdomain.com
|
|
||||||
#@spamdomain.com
|
|
@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
require esmith::AccountsDB;
|
|
||||||
require esmith::DomainsDB;
|
|
||||||
|
|
||||||
%Accounts = esmith::AccountsDB->as_hash;
|
|
||||||
%Domains = esmith::DomainsDB->as_hash;
|
|
||||||
|
|
||||||
"";
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
foreach my $account ( keys %Accounts )
|
|
||||||
{
|
|
||||||
next unless ( exists $Accounts{$account}{Visible}
|
|
||||||
and $Accounts{$account}{Visible} eq "internal" );
|
|
||||||
|
|
||||||
$OUT .= "$account\n";
|
|
||||||
$OUT .= "$account\@$DomainName\n";
|
|
||||||
|
|
||||||
foreach my $domain ( keys %Domains )
|
|
||||||
{
|
|
||||||
next unless $Domains{$domain}{type} eq "domain";
|
|
||||||
$OUT .= "$account\@$domain\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
MAILER-DAEMON
|
|
@ -1 +0,0 @@
|
|||||||
{ $DomainName }
|
|
@ -1 +0,0 @@
|
|||||||
{ (defined $DB->get('qmail')->prop('ConcurrencyLocal')) ? $DB->get('qmail')->prop('ConcurrencyLocal') : "20"; }
|
|
@ -1 +0,0 @@
|
|||||||
{ (defined $DB->get('qmail')->prop('ConcurrencyRemote'))? $DB->get('qmail')->prop('ConcurrencyRemote') : "20"; }
|
|
@ -1 +0,0 @@
|
|||||||
{ $DB->get('qmail')->prop('MaxMessageSize') || "0"; }
|
|
@ -1 +0,0 @@
|
|||||||
{ $DomainName }
|
|
@ -1 +0,0 @@
|
|||||||
{ $DB->get('qmail')->prop('DoubleBounceTo') || "postmaster"; }
|
|
@ -1 +0,0 @@
|
|||||||
{ $DomainName }
|
|
@ -1 +0,0 @@
|
|||||||
{ $qpsmtpd{HeloHost} || $DomainName }
|
|
1
root/etc/e-smith/templates/var/qmail/control/idhost
Normal file
1
root/etc/e-smith/templates/var/qmail/control/idhost
Normal file
@ -0,0 +1 @@
|
|||||||
|
qmail.{ $DomainName }
|
1
root/etc/e-smith/templates/var/qmail/control/qmqpservers
Normal file
1
root/etc/e-smith/templates/var/qmail/control/qmqpservers
Normal file
@ -0,0 +1 @@
|
|||||||
|
127.0.0.1
|
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
use esmith::DomainsDB;
|
|
||||||
|
|
||||||
my $ddb = esmith::DomainsDB->open_ro or die "Couldn't open DomainsDB\n";
|
|
||||||
|
|
||||||
my @rcpt_hosts = ( "$SystemName.$DomainName" );
|
|
||||||
|
|
||||||
foreach my $domain ( $ddb->get_all_by_prop( type => "domain" ) )
|
|
||||||
{
|
|
||||||
push @rcpt_hosts, $domain->key;
|
|
||||||
}
|
|
||||||
|
|
||||||
$OUT = join "\n", @rcpt_hosts;
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
return "" unless (defined $ExternalIP);
|
|
||||||
|
|
||||||
return "[$ExternalIP]";
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
#
|
|
||||||
# qmail's smtproutes mechanism works such that the LAST BEST match
|
|
||||||
# found in /var/qmail/control/smtproutes will be used in preference
|
|
||||||
# to any other entry.
|
|
||||||
#
|
|
||||||
# Consider the following /var/qmail/control/smtproutes example:
|
|
||||||
#
|
|
||||||
# :smarthost.somewhere
|
|
||||||
# domain.place:some.host
|
|
||||||
# domain.place:other.host
|
|
||||||
# :some.other.smarthost.elsewhere
|
|
||||||
#
|
|
||||||
# Mail for user@domain.place will ALWAYS be delivered to
|
|
||||||
# other.host. The entry for some.host will NEVER be used.
|
|
||||||
#
|
|
||||||
# Mail for any other domain will ALWAYS be delivered to
|
|
||||||
# some.other.smarthost.elsewhere. The entry for smarthost.somewhere
|
|
||||||
# will NEVER be used.
|
|
||||||
#
|
|
||||||
# Therefore, if you wish to make any customisations to the
|
|
||||||
# /var/qmail/control/smtproutes templates, you must ensure that they
|
|
||||||
# appear AFTER the standard e-smith template entries.
|
|
||||||
#
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = "";
|
|
||||||
|
|
||||||
use esmith::DomainsDB;
|
|
||||||
my $ddb = esmith::DomainsDB->open_ro();
|
|
||||||
|
|
||||||
for my $domain ( $ddb->domains )
|
|
||||||
{
|
|
||||||
my $mail_server = $domain->prop('MailServer')
|
|
||||||
|| $DelegateMailServer
|
|
||||||
|| 'localhost';
|
|
||||||
|
|
||||||
next if ( $mail_server eq 'localhost' );
|
|
||||||
|
|
||||||
$OUT .= $domain->key . ":$mail_server\n";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = "";
|
|
||||||
|
|
||||||
#--------------------------------------------------
|
|
||||||
# Now check for SMTP smart host
|
|
||||||
#--------------------------------------------------
|
|
||||||
|
|
||||||
if (
|
|
||||||
$SMTPSmartHost
|
|
||||||
&&
|
|
||||||
($SMTPSmartHost ne 'off')
|
|
||||||
&&
|
|
||||||
($SMTPSmartHost !~ /^\s*$/)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
# Is the smtp-auth-proxy enabled?
|
|
||||||
if (${'smtp-auth-proxy'}{'status'} eq 'enabled')
|
|
||||||
{
|
|
||||||
$OUT .= ":localhost:26";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$OUT .= ":$SMTPSmartHost";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
chomp ($OUT);
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = '';
|
|
||||||
|
|
||||||
# Generate qmail user assignments for the admin user. This will be
|
|
||||||
# handled by ~admin/.qmail.
|
|
||||||
|
|
||||||
my (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
|
|
||||||
= getpwnam("admin");
|
|
||||||
|
|
||||||
# It is almost impossible to get Text::Template to output nothing
|
|
||||||
# on failure. It can be done by removing the newline at the end of
|
|
||||||
# this file but that is messy. Therefore, we'll simply return an
|
|
||||||
# error message that will make qmail-newu fail. Also send a
|
|
||||||
# warning message that will be captured in the logs.
|
|
||||||
|
|
||||||
unless (defined $uid && defined $gid && defined $dir)
|
|
||||||
{
|
|
||||||
my $msg =
|
|
||||||
"Failed to obtain user details for \'admin\' "
|
|
||||||
. "while processing admin assignment.";
|
|
||||||
|
|
||||||
warn "$msg\n";
|
|
||||||
$OUT = $msg;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Assign mail for the admin user itself, and for admin-ext.
|
|
||||||
|
|
||||||
my $admin_assign = "admin:${uid}:${gid}:${dir}";
|
|
||||||
$OUT .= "=admin:${admin_assign}:::\n";
|
|
||||||
$OUT .= "+admin-:${admin_assign}:-::";
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = '';
|
|
||||||
|
|
||||||
# Generate qmail user assignments for the alias user. This will be
|
|
||||||
# handled by ~alias/.qmail.
|
|
||||||
|
|
||||||
my (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
|
|
||||||
= getpwnam("alias");
|
|
||||||
|
|
||||||
# It is almost impossible to get Text::Template to output nothing
|
|
||||||
# on failure. It can be done by removing the newline at the end of
|
|
||||||
# this file but that is messy. Therefore, we'll simply return an
|
|
||||||
# error message that will make qmail-newu fail. Also send a
|
|
||||||
# warning message that will be captured in the logs.
|
|
||||||
|
|
||||||
unless (defined $uid && defined $gid && defined $dir)
|
|
||||||
{
|
|
||||||
my $msg =
|
|
||||||
"Failed to obtain user details for \'alias\' "
|
|
||||||
. "while processing alias assignment.";
|
|
||||||
|
|
||||||
warn "$msg\n";
|
|
||||||
$OUT = $msg;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Assign mail for the alias user itself, and for alias-ext.
|
|
||||||
|
|
||||||
my $alias_assign = "alias:${uid}:${gid}:${dir}";
|
|
||||||
$OUT .= "=alias:${alias_assign}:::\n";
|
|
||||||
$OUT .= "+alias-:${alias_assign}:-::";
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = '';
|
|
||||||
|
|
||||||
# Generate qmail user assignments for the shared group. This will
|
|
||||||
# be handled by ~alias/.qmail-shared and ~alias/.qmail-shared-ext.
|
|
||||||
|
|
||||||
my (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
|
|
||||||
= getpwnam("alias");
|
|
||||||
|
|
||||||
# It is almost impossible to get Text::Template to output nothing
|
|
||||||
# on failure. It can be done by removing the newline at the end of
|
|
||||||
# this file but that is messy. Therefore, we'll simply return an
|
|
||||||
# error message that will make qmail-newu fail. Also send a
|
|
||||||
# warning message that will be captured in the logs.
|
|
||||||
|
|
||||||
unless (defined $uid && defined $gid && defined $dir)
|
|
||||||
{
|
|
||||||
my $msg =
|
|
||||||
"Failed to obtain user details for \'alias\' "
|
|
||||||
. "while processing shared assignment.";
|
|
||||||
|
|
||||||
warn "$msg\n";
|
|
||||||
$OUT = $msg;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $alias_assign = "alias:${uid}:${gid}:${dir}";
|
|
||||||
|
|
||||||
$OUT .= "=shared:${alias_assign}:-:shared:\n";
|
|
||||||
$OUT .= "+shared-:${alias_assign}:-shared-::\n";
|
|
||||||
|
|
||||||
# Need to remove the final newline character. Blank lines in
|
|
||||||
# /var/qmail/users/assign are prohibited.
|
|
||||||
|
|
||||||
chomp($OUT);
|
|
||||||
}
|
|
@ -1,56 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = '';
|
|
||||||
|
|
||||||
# Generate qmail user assignments for system accounts. These will
|
|
||||||
# be handled by admin. Make sure we DON'T reassign the admin or
|
|
||||||
# alias users!
|
|
||||||
|
|
||||||
my (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
|
|
||||||
= getpwnam("admin");
|
|
||||||
|
|
||||||
# It is almost impossible to get Text::Template to output nothing
|
|
||||||
# on failure. It can be done by removing the newline at the end of
|
|
||||||
# this file but that is messy. Therefore, we'll simply return an
|
|
||||||
# error message that will make qmail-newu fail. Also send a
|
|
||||||
# warning message that will be captured in the logs.
|
|
||||||
|
|
||||||
unless (defined $uid && defined $gid && defined $dir)
|
|
||||||
{
|
|
||||||
my $msg =
|
|
||||||
"Failed to obtain user details for \'admin\' "
|
|
||||||
. "while processing system assignments.";
|
|
||||||
|
|
||||||
warn "$msg\n";
|
|
||||||
$OUT = $msg;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $admin_assign = "admin:${uid}:${gid}:${dir}";
|
|
||||||
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
my $adb = esmith::AccountsDB->open_ro();
|
|
||||||
|
|
||||||
foreach my $user ( $adb->get_all_by_prop( type => 'system' ) )
|
|
||||||
{
|
|
||||||
next if ($user->key eq "admin");
|
|
||||||
next if ($user->key eq "alias");
|
|
||||||
next if ($user->key eq "shared");
|
|
||||||
|
|
||||||
# Assign mail for system_account@
|
|
||||||
$OUT .= "=" . $user->key . ":${admin_assign}:::\n";
|
|
||||||
|
|
||||||
# Assign mail for system_account-ext@
|
|
||||||
$OUT .= "+" . $user->key . "-:${admin_assign}:-::\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
# Need to remove the final newline character. Blank lines in
|
|
||||||
# /var/qmail/users/assign are prohibited.
|
|
||||||
|
|
||||||
chomp($OUT);
|
|
||||||
|
|
||||||
# Failsafe: /var/qmail/users/assign cannot have blank lines.
|
|
||||||
# Therefore, if $OUT is empty, simply set up an assign for the
|
|
||||||
# admin user.
|
|
||||||
|
|
||||||
$OUT = "=admin:${admin_assign}:::" unless $OUT;
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = '';
|
|
||||||
|
|
||||||
# Generate qmail user assignments for users. These will be handled by
|
|
||||||
# ~user/.qmail.
|
|
||||||
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
my $adb = esmith::AccountsDB->open_ro();
|
|
||||||
|
|
||||||
foreach $user ( $adb->users )
|
|
||||||
{
|
|
||||||
my $user_name = $user->key;
|
|
||||||
my (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
|
|
||||||
= getpwnam($user_name);
|
|
||||||
|
|
||||||
# It is almost impossible to get Text::Template to output nothing
|
|
||||||
# on failure. It can be done by removing the newline at the end of
|
|
||||||
# this file but that is messy. Therefore, we'll simply return an
|
|
||||||
# error message that will make qmail-newu fail. Also send a
|
|
||||||
# warning message that will be captured in the logs.
|
|
||||||
|
|
||||||
unless (defined $uid && defined $gid && defined $dir)
|
|
||||||
{
|
|
||||||
my $msg =
|
|
||||||
"Failed to obtain user details for \'$user_name\' "
|
|
||||||
. "while processing user assignments.";
|
|
||||||
|
|
||||||
warn "$msg\n";
|
|
||||||
$OUT = $msg;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$user_assign = $user_name . ":${uid}:${gid}:${dir}";
|
|
||||||
|
|
||||||
# Assign mail for user@
|
|
||||||
$OUT .= "=" . $user_name . ":${user_assign}:::\n";
|
|
||||||
|
|
||||||
# Assign mail for user-ext@
|
|
||||||
$OUT .= "+" . $user_name . "-:${user_assign}:-::\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
# Need to remove the final newline character. Blank lines in
|
|
||||||
# /var/qmail/users/assign are prohibited.
|
|
||||||
|
|
||||||
chomp($OUT);
|
|
||||||
|
|
||||||
# Failsafe: /var/qmail/users/assign cannot have blank lines.
|
|
||||||
# Therefore, if $OUT is empty, simply set up an assign for the
|
|
||||||
# alias user.
|
|
||||||
|
|
||||||
unless ($OUT)
|
|
||||||
{
|
|
||||||
(undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
|
|
||||||
= getpwnam("alias");
|
|
||||||
|
|
||||||
$alias_assign = "alias:${uid}:${gid}:${dir}";
|
|
||||||
$OUT = "=alias:${alias_assign}:::";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = '';
|
|
||||||
|
|
||||||
# Generate qmail user assignments for pseudonyms. These will
|
|
||||||
# be handled by ~user/.qmail in the case of a user pseudonym
|
|
||||||
# or by ~admin/.qmail in the case of a system pseudonym or by
|
|
||||||
# alias/.qmail-groupname in the case of a group pseudonym.
|
|
||||||
|
|
||||||
my (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
|
|
||||||
= getpwnam("alias");
|
|
||||||
|
|
||||||
# It is almost impossible to get Text::Template to output nothing
|
|
||||||
# on failure. It can be done by removing the newline at the end of
|
|
||||||
# this file but that is messy. Therefore, we'll simply return an
|
|
||||||
# error message that will make qmail-newu fail. Also send a
|
|
||||||
# warning message that will be captured in the logs.
|
|
||||||
|
|
||||||
unless (defined $uid && defined $gid && defined $dir)
|
|
||||||
{
|
|
||||||
my $msg =
|
|
||||||
"Failed to obtain user details for \'alias\' "
|
|
||||||
. "while processing pseudonym assignments.";
|
|
||||||
|
|
||||||
warn "$msg\n";
|
|
||||||
$OUT = $msg;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $alias_assign = "alias:${uid}:${gid}:${dir}";
|
|
||||||
|
|
||||||
undef $uid;
|
|
||||||
undef $gid;
|
|
||||||
undef $dir;
|
|
||||||
|
|
||||||
(undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
|
|
||||||
= getpwnam("admin");
|
|
||||||
|
|
||||||
unless (defined $uid && defined $gid && defined $dir)
|
|
||||||
{
|
|
||||||
my $msg =
|
|
||||||
"Failed to obtain user details for \'admin\' "
|
|
||||||
. "while processing pseudonym assignments.";
|
|
||||||
|
|
||||||
warn "$msg\n";
|
|
||||||
$OUT = $msg;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $admin_assign = "admin:${uid}:${gid}:${dir}";
|
|
||||||
|
|
||||||
# Create assignments for each pseudonym.
|
|
||||||
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
my $adb = esmith::AccountsDB->open_ro();
|
|
||||||
|
|
||||||
foreach $pseudonym ( $adb->pseudonyms )
|
|
||||||
{
|
|
||||||
next if ( $pseudonym->key =~ /@/ ); # user@domain goes in virtualdomains
|
|
||||||
|
|
||||||
my $account = $pseudonym->prop('Account');
|
|
||||||
unless ($account)
|
|
||||||
{
|
|
||||||
my $key = $pseudonym->key;
|
|
||||||
warn "pseudonym $key has no account property, default to admin";
|
|
||||||
$account = $adb->get('admin');
|
|
||||||
#next;
|
|
||||||
}
|
|
||||||
|
|
||||||
$account = $adb->get($pseudonym->prop('Account'));
|
|
||||||
unless ($account)
|
|
||||||
{
|
|
||||||
my $key = $pseudonym->key;
|
|
||||||
warn "pseudonym $key points to account which does not exist, default to admin";
|
|
||||||
$account = $adb->get('admin');
|
|
||||||
#next;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $i = 1;
|
|
||||||
while ( $account->prop('type') eq "pseudonym")
|
|
||||||
{
|
|
||||||
$account = $adb->get($account->prop('Account'));
|
|
||||||
unless ($account)
|
|
||||||
{
|
|
||||||
my $key = $pseudonym->key;
|
|
||||||
warn "pseudonym $key points to account which does not exist, default to admin";
|
|
||||||
$account = $adb->get('admin');
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
$i ++; last if $i>10;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($account->prop('type') eq "pseudonym")
|
|
||||||
{
|
|
||||||
warn "users/assign: Skipping " . $pseudonym->key . " - too many pseudonym levels\n";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($account->prop('type') eq "user")
|
|
||||||
{
|
|
||||||
my (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
|
|
||||||
= getpwnam($account->key);
|
|
||||||
|
|
||||||
unless (defined $uid && defined $gid && defined $dir)
|
|
||||||
{
|
|
||||||
my $msg =
|
|
||||||
"Failed to obtain user details for \'" . $account->key . "\' "
|
|
||||||
. "while processing pseudonym assignments.";
|
|
||||||
|
|
||||||
warn "$msg\n";
|
|
||||||
$OUT = $msg;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$assign = $account->key . ":${uid}:${gid}:${dir}";
|
|
||||||
|
|
||||||
# Assign mail for user_pseudonym@
|
|
||||||
$OUT .= "=" . $pseudonym->key . ":${assign}:::\n";
|
|
||||||
$OUT .= "+" . $pseudonym->key . "-:${assign}:-::\n";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($account->prop('type') eq "group" || $account->key eq "shared")
|
|
||||||
{
|
|
||||||
$OUT .= "=" . $pseudonym->key . ":${alias_assign}:-:" . $account->key . ":\n";
|
|
||||||
$OUT .= "+" . $pseudonym->key . "-:${alias_assign}:-:" . $account->key . ":\n";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($account->prop('type') eq "system" )
|
|
||||||
{
|
|
||||||
$OUT .= "=" . $pseudonym->key . ":${admin_assign}:::\n";
|
|
||||||
$OUT .= "+" . $pseudonym->key . "-:${admin_assign}:-::\n";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Need to remove the final newline character. Blank lines in
|
|
||||||
# /var/qmail/users/assign are prohibited.
|
|
||||||
|
|
||||||
chomp($OUT);
|
|
||||||
|
|
||||||
# Failsafe: /var/qmail/users/assign cannot have blank lines.
|
|
||||||
# Therefore, if $OUT is empty, simply set up an assign for the
|
|
||||||
# alias user.
|
|
||||||
|
|
||||||
$OUT = "=alias:${alias_assign}:::" unless $OUT;
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
{
|
|
||||||
$OUT = '';
|
|
||||||
|
|
||||||
# Generate qmail user assignments for groups. These will be handled
|
|
||||||
# by ~alias/.qmail-groupname and ~alias/.qmail-groupname-ext.
|
|
||||||
|
|
||||||
my (undef, undef, $uid, $gid, undef, undef, undef, $dir, undef)
|
|
||||||
= getpwnam("alias");
|
|
||||||
|
|
||||||
# It is almost impossible to get Text::Template to output nothing
|
|
||||||
# on failure. It can be done by removing the newline at the end of
|
|
||||||
# this file but that is messy. Therefore, we'll simply return an
|
|
||||||
# error message that will make qmail-newu fail. Also send a
|
|
||||||
# warning message that will be captured in the logs.
|
|
||||||
|
|
||||||
unless (defined $uid && defined $gid && defined $dir)
|
|
||||||
{
|
|
||||||
my $msg =
|
|
||||||
"Failed to obtain user details for \'alias\' "
|
|
||||||
. "while processing group assignments.";
|
|
||||||
|
|
||||||
warn "$msg\n";
|
|
||||||
$OUT = $msg;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $alias_assign = "alias:${uid}:${gid}:${dir}";
|
|
||||||
|
|
||||||
use esmith::AccountsDB;
|
|
||||||
my $adb = esmith::AccountsDB->open_ro();
|
|
||||||
|
|
||||||
foreach $group ( $adb->groups )
|
|
||||||
{
|
|
||||||
# Assign mail for group@
|
|
||||||
$OUT .= "=" . $group->key . ":${alias_assign}:-:" . $group->key . ":\n";
|
|
||||||
|
|
||||||
# Assign mail for group-ext@
|
|
||||||
$OUT .= "+" . $group->key . "-:${alias_assign}:-" . $group->key . "-::\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
# Need to remove the final newline character. Blank lines in
|
|
||||||
# /var/qmail/users/assign are prohibited.
|
|
||||||
|
|
||||||
chomp($OUT);
|
|
||||||
|
|
||||||
# Failsafe: /var/qmail/users/assign cannot have blank lines.
|
|
||||||
# Therefore, if $OUT is empty, simply set up an assign for the
|
|
||||||
# alias user.
|
|
||||||
|
|
||||||
$OUT = "=alias:${alias_assign}:::" unless $OUT;
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
.
|
|
@ -1 +0,0 @@
|
|||||||
../var/service/qmail
|
|
@ -1,15 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=qmail, message transfer agent
|
|
||||||
After=network.target
|
|
||||||
Requires=runit.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
ExecStartPre=/sbin/e-smith/service-status qmail
|
|
||||||
ExecStart=/usr/bin/sv u /service/qmail
|
|
||||||
ExecStop=/usr/bin/sv stop /service/qmail
|
|
||||||
ExecReload=/usr/bin/sv t /service/qmail
|
|
||||||
RemainAfterExit=yes
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=sme-server.target
|
|
1
root/var/qmail/control/qmqpservers
Normal file
1
root/var/qmail/control/qmqpservers
Normal file
@ -0,0 +1 @@
|
|||||||
|
127.0.0.1
|
@ -1,30 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
# copyright (C) 2001 e-smith, inc.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
# Technical support for this program is available from e-smith, inc.
|
|
||||||
# Please visit our web site www.e-smith.com for details.
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
|
|
||||||
NUM=$(/sbin/e-smith/db configuration getprop qmail KeepLogFiles)
|
|
||||||
|
|
||||||
exec \
|
|
||||||
/usr/bin/setuidgid qmaill \
|
|
||||||
/usr/bin/multilog t s5000000 \
|
|
||||||
n${NUM:-10} \
|
|
||||||
/var/log/qmail
|
|
@ -1,32 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
# copyright (C) 2002-2006 Mitel Networks Corporation
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
#----------------------------------------------------------------------
|
|
||||||
if [ ! -f /var/qmail/queue/lock/tcpto ]
|
|
||||||
then
|
|
||||||
dd bs=1024 count=1 if=/dev/zero of=/var/qmail/queue/lock/tcpto
|
|
||||||
chown qmailr:qmail /var/qmail/queue/lock/tcpto
|
|
||||||
chmod 644 /var/qmail/queue/lock/tcpto
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec \
|
|
||||||
/usr/bin/env - PATH="/var/qmail/bin:/bin:/usr/bin:/usr/local/bin" \
|
|
||||||
/var/qmail/bin/qmail-start \
|
|
||||||
./Maildir/ \
|
|
||||||
2>&1
|
|
@ -15,9 +15,6 @@ BuildRoot: /var/tmp/%{name}-%{version}-%{release}-buildroot
|
|||||||
BuildRequires: smeserver-devtools >= 1.13.0-04
|
BuildRequires: smeserver-devtools >= 1.13.0-04
|
||||||
BuildArchitectures: noarch
|
BuildArchitectures: noarch
|
||||||
Requires: mini-qmail
|
Requires: mini-qmail
|
||||||
#those two one will requires qmail rpm, should either change their requirement to a binary
|
|
||||||
# or make this rpm or mini-qmail provides qmail
|
|
||||||
# first option is cleaner
|
|
||||||
Requires: dot-forward
|
Requires: dot-forward
|
||||||
Requires: fastforward
|
Requires: fastforward
|
||||||
Requires: smeserver-email
|
Requires: smeserver-email
|
||||||
@ -32,7 +29,16 @@ AutoReqProv: no
|
|||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Tue Dec 03 2024 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.1-1.sme
|
* Tue Dec 03 2024 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.1-1.sme
|
||||||
- initial release of smeserver-mini-qmail from former smeserver-qmail [SME: ]
|
- initial release of smeserver-mini-qmail from former smeserver-qmail
|
||||||
|
. only for final delivery or forward behind qpsmtpd and postfix
|
||||||
|
. set /var/qmail/control/qmqpservers server file
|
||||||
|
. set junkmail delivery to dovecot-lda
|
||||||
|
. we only need configs idhost, qmqpservers, me, defaultdomain, plusdomain, rcpthosts
|
||||||
|
. removing controls badrcptto,helohost,smtproutes,rcpthosts,badmailfrom,databytes,bouncefrom,
|
||||||
|
bouncehost,concurrencylocal,concurrencyremote,doublebouncehost,doublebounceto,envnoathost
|
||||||
|
. removing /var/qmail/users
|
||||||
|
. removing alias
|
||||||
|
. cleaning actions scripts (TODO: move pseudonym-cleanup to smeserver-email)
|
||||||
|
|
||||||
* Thu Apr 25 2024 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.0-8.sme
|
* Thu Apr 25 2024 Jean-Philippe Pialasse <jpp@koozali.org> 11.0.0-8.sme
|
||||||
- move qmail template from qpsmtpd [SME: 9492]
|
- move qmail template from qpsmtpd [SME: 9492]
|
||||||
@ -442,16 +448,7 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
(cd root ; find . -depth -print | cpio -dump $RPM_BUILD_ROOT)
|
(cd root ; find . -depth -print | cpio -dump $RPM_BUILD_ROOT)
|
||||||
rm -f %{name}-%{version}-%{release}-filelist
|
rm -f %{name}-%{version}-%{release}-filelist
|
||||||
/sbin/e-smith/genfilelist $RPM_BUILD_ROOT \
|
/sbin/e-smith/genfilelist $RPM_BUILD_ROOT \
|
||||||
--dir '/var/service/qmail' 'attr(1755,root,root)' \
|
|
||||||
--file '/var/service/qmail/down' 'attr(0644,root,root)' \
|
|
||||||
--file '/var/service/qmail/run' 'attr(0755,root,root)' \
|
|
||||||
--file '/var/service/qmail/control/1' 'attr(0750,root,root)' \
|
|
||||||
--dir '/var/service/qmail/supervise' 'attr(0700,root,root)' \
|
|
||||||
--dir '/var/service/qmail/log' 'attr(0755,root,root)' \
|
|
||||||
--file '/var/service/qmail/log/run' 'attr(0755,root,root)' \
|
|
||||||
--dir '/var/service/qmail/log/supervise' 'attr(0700,root,root)' \
|
|
||||||
--dir '/var/log/qmail' 'attr(2750,qmaill,nofiles)' \
|
--dir '/var/log/qmail' 'attr(2750,qmaill,nofiles)' \
|
||||||
--dir '/var/qmail/alias' 'attr(2755,alias,qmail)' \
|
|
||||||
> %{name}-%{version}-%{release}-filelist
|
> %{name}-%{version}-%{release}-filelist
|
||||||
echo "%doc COPYING" >> %{name}-%{version}-%{release}-filelist
|
echo "%doc COPYING" >> %{name}-%{version}-%{release}-filelist
|
||||||
|
|
||||||
@ -461,6 +458,10 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%pre
|
%pre
|
||||||
%preun
|
%preun
|
||||||
%post
|
%post
|
||||||
|
rm /var/qmail/control/{helohost,smtproutes,rcpthosts,badrcptto,badmailfrom,databytes,bouncefrom,bouncehost,concurrencylocal,concurrencyremote,doublebouncehost,doublebounceto,envnoathost} -f
|
||||||
|
rm -rf /var/qmail/users
|
||||||
|
rm -rf /var/qmail/alias/*
|
||||||
|
|
||||||
%postun
|
%postun
|
||||||
|
|
||||||
%files -f %{name}-%{version}-%{release}-filelist
|
%files -f %{name}-%{version}-%{release}-filelist
|
||||||
|
Loading…
Reference in New Issue
Block a user