blob: 1c7552df3e3152be0485b7d7c03e2bcc53b753a2 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
#!/sbin/openrc-run
description="Start/stop the s6 services for netqmail"
depend()
{
after net
after localmount
}
makesmtpd()
{
set -e
ip="$1"
ext="$2"
if echo "$ip" | grep -qF : ; then
ipv=6
relayfor="$smtprelay6"
elif echo "$ip" | grep -qF . ; then
ipv=4
relayfor="$smtprelay4"
else
return 1
fi
if ! s6-tcpserver-socketbinder -dBb0 -- "$ip" 25 true 2>/dev/null ; then
return 1
fi
service="smtpd-$ip"
sdir=/run/services/"$service"
logdir=/var/log/"smtpd-$ip"
mkdir -p -m 0755 "$logdir"
chown qmaill:qmaill "$logdir"
chmod 2700 "$logdir"
rm -rf "$sdir"
cp -a /etc/qmail/services/smtpd-skeleton"$ext" "$sdir"
echo "$ip" > "$sdir"/env/IP
echo "$KEYFILE" > "$sdir"/env/KEYFILE
echo "$CERTFILE" > "$sdir"/env/CERTFILE
for j in $relayfor ; do
mkdir -p -m 0755 "$sdir/data/rules/ip${ipv}/$j/env"
touch "$sdir/data/rules/ip${ipv}/$j/allow"
echo > "$sdir/data/rules/ip${ipv}/$j/env/RELAYCLIENT"
done
return 0
}
stop()
{
set -e
. /etc/conf.d/netqmail
ebegin "Stopping SMTP listeners"
dirs=""
logs=""
for i in ${IPS} ; do
rm -f "/run/service/smtpd-$i"
s6-svc -d "/run/services/smtpd-$i"
dirs="$dirs /run/services/smtpd-$i"
logs="$logs /run/services/smtpd-$i/log"
done
s6-svwait -D $dirs
eend $?
ebegin "Stopping the qmail-send service (this may take some time)"
rm -f /run/service/qmail
logs="$logs /var/qmail/services/qmail/log"
s6-svc -dwD /var/qmail/services/qmail
eend $?
ebegin "Stopping loggers and cleaning up qmail services"
for i in $logs ; do
s6-svc -d "$i"
done
s6-svwait -D $logs
s6-svscanctl -aN /run/service
rm -rf $dirs
eend $?
}
start()
{
set -e
. /etc/conf.d/netqmail
if test -r "$KEYFILE" && test -r "$CERTFILE" ; then
ext=""
else
ext="-notls"
fi
ebegin "Parsing the relay subnets"
smtprelay4=
smtprelay6=
for i in ${RELAY_SUBNETS} ; do
j=`echo "$i" | tr / _`
if echo "$i" | grep -qF : ; then
smtprelay6="$smtprelay6 $j"
elif echo "$i" | grep -qF . ; then
smtprelay4="$smtprelay4 $j"
else
false
break
fi
done
eend $?
ebegin "Starting the qmail-send service"
ln -nsf ../../var/qmail/services/qmail /run/service/qmail
s6-svscanctl -a /run/service
s6-svwait -U /var/qmail/services/qmail
eend $?
mkdir -p /run/services
for i in ${IPS} ; do
ebegin "Creating a service directory for a SMTP listener on $i"
makesmtpd "$i" "$ext"
eend $?
done
dirs=""
ebegin "Starting SMTP listeners"
for i in ${IPS} ; do
ln -nsf "../services/smtpd-$i" "/run/service/smtpd-$i"
dirs="$dirs /run/service/smtpd-$i"
done
s6-svscanctl -aN /run/service
s6-svwait -U $dirs
eend $?
}
|