initial commit of file from CVS for smeserver-altqmail on Sat Sep 7 20:06:59 AEST 2024

This commit is contained in:
Trevor Batley
2024-09-07 20:06:59 +10:00
parent c535ecdbab
commit 8a31f1fcf2
31 changed files with 901 additions and 2 deletions

View File

@@ -0,0 +1,9 @@
#!/bin/sh
NUM=$(/sbin/e-smith/db configuration getprop altqmail-smtpd KeepLogFiles)
exec \
/usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t s5000000 \
n${NUM:-10} \
/var/log/altqmail-smtpd

View File

@@ -0,0 +1,9 @@
#!/bin/sh
PORT=$(/sbin/e-smith/db configuration getprop altqmail-smtpd TCPPort)
exec \
/usr/bin/env - PATH="/var/qmail/bin:/bin:/usr/bin:/usr/local/bin" \
tcpsvd -vv 127.0.0.1 ${PORT:-27} \
chpst -u qmails -/ ../altqmail/root /var/qmail/bin/qmail-smtpd \
2>&1

View File

@@ -0,0 +1,6 @@
#!/bin/sh
#umount /var/service/altqmail/root/var/qmail/bin
rm -rf /var/service/altqmail/root/var/qmail/bin/*
rm -rf root/etc
rm -rf root/lib{,64}

View File

@@ -0,0 +1,9 @@
#!/bin/sh
NUM=$(/sbin/e-smith/db configuration getprop altqmail KeepLogFiles)
exec \
/usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t s5000000 \
n${NUM:-10} \
/var/log/altqmail

View File

@@ -0,0 +1,119 @@
#!/usr/bin/perl
use Fcntl ':flock';
$QMAIL = "/var/qmail";
$CONTROL = "$QMAIL/control";
open LOG, ">>", "/tmp/qmail-remote-log";
{ my $ofh = select LOG; $|=1; select $ofh; }
Log("starting");
$msgs = 0;
$time = 0;
load_policy();
while(1) {
my @last = grep {$_ > time() - $time} read_log();
Log("status " . @last . "/$msgs");
if (@last >= $msgs) {
# Log("sleeping");
} else {
last;
}
while (@last >= $msgs) {
my $oldest = $last[0];
my $age = time() - $oldest;
# When will the oldest message expire off the queue?
# The end of the queue is $time seconds ago
# The age of the oldest message is now time() - $oldest
# The oldest message will expire in $time - $age seconds
my $zzz = $time - $age + int(rand(3));
$zzz = 1 if $zzz < 1;
# Log("Sleeping for $zzz secs");
sleep $zzz;
shift @last while @last && $last[0] < time() - $time;
load_policy();
}
}
append_log(time());
#if (open F, ">>", "/tmp/qmail-remote-log") {
# print F time(), " @ARGV\n";
#}
Log("sending @ARGV");
exec "/var/qmail/bin/qmail-remote.real", @ARGV;
exit 0;
sub fail {
my $msg = shift;
Log("fail: $msg");
print "Z$msg";
exit 0;
}
my $last_policy_load ;
sub load_policy {
my $POLICY = "$CONTROL/outratelimit";
return if ((stat($POLICY))[9] <= $last_policy_load);
if (open F, "<", $POLICY) {
chomp(my $line = <F>);
($msgs, $time) = split m{/}, $line;
if (defined $last_policy_load) {
Log("Policy changed to $msgs/$time");
}
$last_policy_load = time();
close F;
}
}
sub read_log {
lock_semaphore(LOCK_SH);
my @last;
if (open(F, "+<", "$CONTROL/outlog")) {
chomp(@last = <F>);
close F;
}
lock_semaphore(LOCK_UN);
return @last;
}
sub append_log {
lock_semaphore(LOCK_EX);
if (open(F, "+<", "$CONTROL/outlog")) {
my @last = grep {$_ > time() - $time} <F>;
chomp(@last);
truncate F, 0;
seek F, 0, 0;
print F join "\n", @last, @_, "";
close F;
}
lock_semaphore(LOCK_UN);
}
sub lock_semaphore {
if (open SEM, ">", "$CONTROL/qmail-remote-semaphore") {
flock(SEM, $_[0]) or fail("Couldn't lock semaphore: $!");
} else {
fail("Couldn't open semaphore: $!");
}
}
sub Log {
my @args = @_;
tr/\n//d for @args;
print LOG time(), " $$ @args\n";
}

View File

@@ -0,0 +1,110 @@
#! /bin/sh
exec 2>&1
#/bin/mount --bind /var/qmail/bin/ root/var/qmail/bin
if [ ! -f root/var/qmail/bin/ ]; then
cp -a /var/qmail/bin/* root/var/qmail/bin/
mv root/var/qmail/bin/qmail-remote root/var/qmail/bin/qmail-remote.real
cp -a qmail-remote-throttle root/var/qmail/bin/qmail-remote
fi
if [ ! -d root/etc ]; then
mkdir root/etc
cp -a /etc/resolv.conf root/etc
cp -a /etc/services root/etc
cp -a /etc/passwd root/etc
cp -a /etc/group root/etc
fi
LIBDIR="lib"
LIBC="2.17"
if [ -d /lib64 ]; then
LIBDIR="lib64"
fi
if [ ! -d root/$LIBDIR ]; then
mkdir root/$LIBDIR
cp -a /$LIBDIR/libc-$LIBC.so root/$LIBDIR
ln -s libc-$LIBC.so root/$LIBDIR/libc.so.6
cp -a /$LIBDIR/ld-$LIBC.so root/$LIBDIR
if [ -d /lib64 ]; then
ln -s ld-$LIBC.so root/$LIBDIR/ld-linux-x86-64.so.2
else
ln -s ld-$LIBC.so root/$LIBDIR/ld-linux.so.2
fi
cp -a /$LIBDIR/libnss_files-$LIBC.so root/$LIBDIR
ln -s libnss_files-$LIBC.so root/$LIBDIR/libnss_files.so.2
cp -a /$LIBDIR/libresolv-$LIBC.so root/$LIBDIR
ln -s libresolv-$LIBC.so root/$LIBDIR/libresolv.so.2
## added for throttle
# for perl /usr/bin/perl
#cp --parents `ldd BIN_PATH | cut -d " " -f 3` CHROOT_PATH
#cp -a --parents `ldd /usr/bin/perl | cut -d " " -f 3` root/
# wold almost work inside a loop checking if link and cpying also the target
cp -a --parents /usr/$LIBDIR/perl5/CORE/libperl.so root/
cp -a --parents /$LIBDIR/libresolv.so.2 root/
cp -a --parents /$LIBDIR/libnsl.so.1 root/
cp -a --parents /$LIBDIR/libnsl-$LIBC.so root/
cp -a --parents /$LIBDIR/libdl.so.2 root/
cp -a --parents /$LIBDIR/libdl-$LIBC.so root/
cp -a --parents /$LIBDIR/libm.so.6 root/
cp -a --parents /$LIBDIR/libm-$LIBC.so root/
cp -a --parents /$LIBDIR/libcrypt.so.1 root/
cp -a --parents /$LIBDIR/libcrypt-$LIBC.so root/
cp -a --parents /$LIBDIR/libutil.so.1 root/
cp -a --parents /$LIBDIR/libutil-$LIBC.so root/
cp -a --parents /$LIBDIR/libpthread.so.0 root/
cp -a --parents /$LIBDIR/libpthread-$LIBC.so root/
cp -a --parents /lib64/libfreebl3.so root/
cp -a --parents /usr/$LIBDIR/perl5/Fcntl.pm root/
cp -a --parents /usr/$LIBDIR/perl5/auto/Fcntl root/
cp -a --parents /usr/share/perl5/strict.pm root/
cp -a --parents /usr/share/perl5/AutoLoader.pm root/
cp -a --parents /usr/share/perl5/Carp.pm root/
cp -a --parents /usr/share/perl5/Carp/Heavy.pm root/
cp -a --parents /usr/share/perl5/Exporter.pm root/
cp -a --parents /usr/share/perl5/Exporter root/
cp -a --parents /usr/share/perl5/warnings.pm root/
cp -a --parents /usr/$LIBDIR/perl5/XSLoader.pm root/
cp -a --parents /usr/$LIBDIR/perl5/DynaLoader.pm root/
cp -a --parents /usr/$LIBDIR/perl5/Config.pm root/
cp -a --parents /usr/$LIBDIR/perl5/Config_heavy.pl root/
cp -a --parents /usr/$LIBDIR/perl5/Config_git.pl root/
cp -a --parents /usr/$LIBDIR/perl5/auto/DynaLoader/dl_findfile.al root/
# might better somewhere else
cp -a --parents /usr/bin/perl root/
# this one is needed to set locale for perl
cp -a --parent /usr/lib/locale root/
#bin sh for qmail-qstat
cp -a --parents /bin/sh root/
cp -a --parents /bin/bash root/
cp -a --parents /$LIBDIR/libtinfo.so.5 root/
cp -a --parents /$LIBDIR/libtinfo.so.5.7 root/
cp -a --parents /usr/bin/wc root/
cp -a --parents /bin/find root/
cp -a --parents /usr/bin/expr root/
cp -a --parents /$LIBDIR/libselinux.so.1 root/
cp -a --parents /$LIBDIR/librt.so.1 root/
cp -a --parents /$LIBDIR/librt-2.12.so root/
cp -a --parents /usr/$LIBDIR/libgmp.so.3 root/
cp -a --parents /usr/$LIBDIR/libgmp.so.3.5.0 root/
fi
chown qmails:qmail root/var/qmail/queue/lock/trigger
chmod 622 root/var/qmail/queue/lock/trigger
exec \
/usr/bin/env - PATH="/var/qmail/bin:/bin:/usr/bin:/usr/local/bin" \
/usr/sbin/chroot root /var/qmail/bin/qmail-start \
./Maildir/