* 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:
Jean-Philippe Pialasse 2024-12-09 23:37:37 -05:00
parent 3e0f7d433c
commit 89566576f1
47 changed files with 37 additions and 941 deletions

View File

@ -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)
[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)
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
<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.
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/

View File

@ -4,28 +4,15 @@ use esmith::Build::CreateLinks qw(:all);
use File::Basename;
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(
badmailfrom
badrcptto
bouncefrom
bouncehost
concurrencylocal
concurrencyremote
databytes
defaultdomain
defaulthost
doublebounceto
envnoathost
helohost
idhost
locals
me
plusdomain
rcpthosts
smtproutes
qmqpservers
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:
@ -87,12 +39,6 @@ templates2events("/var/qmail/alias/.qmail-shared" , qw(bootstrap-console-save us
#--------------------------------------------------
$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:
# 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_link("pseudonym-cleanup", $event, "03");
event_link("qmail-update-group", $event, "20");
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:
@ -111,25 +54,12 @@ safe_symlink("/var/qmail/bin/qmail-newu", "root/etc/e-smith/events/$event/S55ema
#--------------------------------------------------
$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:
# rewrite config files and restart server
#--------------------------------------------------
$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:
# 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("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:
#--------------------------------------------------
$event = "group-create";
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:
@ -167,10 +85,6 @@ safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
$event = "group-delete";
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:
@ -178,10 +92,6 @@ safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
$event = "group-modify";
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:
@ -189,7 +99,6 @@ safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
$event = "user-create";
event_link("qmail-update-user", $event, "20");
event_link("qmail-update-group", $event, "20");
#--------------------------------------------------
# actions for user-modify event
@ -197,7 +106,6 @@ event_link("qmail-update-group", $event, "20");
$event = "user-modify";
event_link("qmail-update-user", $event, "20");
event_link("qmail-update-group", $event, "20");
#--------------------------------------------------
# actions for user-modify-admin event
@ -211,30 +119,20 @@ event_link("qmail-update-user", $event, "20");
#--------------------------------------------------
$event = "user-delete";
event_link("qmail-update-group", $event, "25");
#--------------------------------------------------
# actions for ip-up event:
#--------------------------------------------------
$event = "ip-up";
event_link("qmail-ipup", $event, "20");
#--------------------------------------------------
# actions for ip-change event:
#--------------------------------------------------
$event = "ip-change";
safe_symlink("sighup", "root/etc/e-smith/events/$event/services2adjust/qmail");
#--------------------------------------------------
# actions for smeserver-mini-qmail-update event:
#--------------------------------------------------
$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");
#--------------------------------------------------
@ -246,11 +144,7 @@ foreach $event ( qw(pseudonym-create pseudonym-modify pseudonym-delete
{
event_link("pseudonym-cleanup", $event, "03");
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-shared", "root/var/qmail/alias/.qmail-shared-default");

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -1,2 +1,3 @@
| [ -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/

View File

@ -1,5 +0,0 @@
{
($EmailUnknownUser eq "returntosender") ?
"| bouncesaying 'Recipient unknown'" :
"$EmailUnknownUser";
}

View File

@ -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));
}

View File

@ -1 +0,0 @@
| forward $DEFAULT@{"$SystemName.$DomainName"}

View File

@ -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";
}
}

View File

@ -1,2 +0,0 @@
#spamer@spamdomain.com
#@spamdomain.com

View File

@ -1,9 +0,0 @@
{
require esmith::AccountsDB;
require esmith::DomainsDB;
%Accounts = esmith::AccountsDB->as_hash;
%Domains = esmith::DomainsDB->as_hash;
"";
}

View File

@ -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";
}
}
}

View File

@ -1 +0,0 @@
MAILER-DAEMON

View File

@ -1 +0,0 @@
{ $DomainName }

View File

@ -1 +0,0 @@
{ (defined $DB->get('qmail')->prop('ConcurrencyLocal')) ? $DB->get('qmail')->prop('ConcurrencyLocal') : "20"; }

View File

@ -1 +0,0 @@
{ (defined $DB->get('qmail')->prop('ConcurrencyRemote'))? $DB->get('qmail')->prop('ConcurrencyRemote') : "20"; }

View File

@ -1 +0,0 @@
{ $DB->get('qmail')->prop('MaxMessageSize') || "0"; }

View File

@ -1 +0,0 @@
{ $DomainName }

View File

@ -1 +0,0 @@
{ $DB->get('qmail')->prop('DoubleBounceTo') || "postmaster"; }

View File

@ -1 +0,0 @@
{ $DomainName }

View File

@ -1 +0,0 @@
{ $qpsmtpd{HeloHost} || $DomainName }

View File

@ -0,0 +1 @@
qmail.{ $DomainName }

View File

@ -0,0 +1 @@
127.0.0.1

View File

@ -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;
}

View File

@ -1,5 +0,0 @@
{
return "" unless (defined $ExternalIP);
return "[$ExternalIP]";
}

View File

@ -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.
#
}

View File

@ -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";
}
}

View File

@ -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);
}

View File

@ -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}:-::";
}

View File

@ -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}:-::";
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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}:::";
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -1 +0,0 @@
../var/service/qmail

View File

@ -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

View File

@ -0,0 +1 @@
127.0.0.1

View File

@ -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

View File

@ -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

View File

@ -15,9 +15,6 @@ BuildRoot: /var/tmp/%{name}-%{version}-%{release}-buildroot
BuildRequires: smeserver-devtools >= 1.13.0-04
BuildArchitectures: noarch
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: fastforward
Requires: smeserver-email
@ -32,7 +29,16 @@ AutoReqProv: no
%changelog
* 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
- 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)
rm -f %{name}-%{version}-%{release}-filelist
/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/qmail/alias' 'attr(2755,alias,qmail)' \
> %{name}-%{version}-%{release}-filelist
echo "%doc COPYING" >> %{name}-%{version}-%{release}-filelist
@ -461,6 +458,10 @@ rm -rf $RPM_BUILD_ROOT
%pre
%preun
%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
%files -f %{name}-%{version}-%{release}-filelist