initial commit of file from CVS for smeserver-altqmail on Sat Sep 7 20:06:59 AEST 2024
This commit is contained in:
9
root/var/service/altqmail-smtpd/log/run
Normal file
9
root/var/service/altqmail-smtpd/log/run
Normal 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
|
9
root/var/service/altqmail-smtpd/run
Normal file
9
root/var/service/altqmail-smtpd/run
Normal 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
|
6
root/var/service/altqmail/finish
Normal file
6
root/var/service/altqmail/finish
Normal 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}
|
9
root/var/service/altqmail/log/run
Normal file
9
root/var/service/altqmail/log/run
Normal 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
|
119
root/var/service/altqmail/qmail-remote-throttle
Normal file
119
root/var/service/altqmail/qmail-remote-throttle
Normal 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";
|
||||
}
|
||||
|
110
root/var/service/altqmail/run
Normal file
110
root/var/service/altqmail/run
Normal 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/
|
||||
|
Reference in New Issue
Block a user