1 |
diff -Nur -x '*.orig' -x '*.rej' smeserver-qpsmtpd-2.4.0/createlinks mezzanine_patched_smeserver-qpsmtpd-2.4.0/createlinks |
2 |
--- smeserver-qpsmtpd-2.4.0/createlinks 2016-05-03 00:41:30.658369153 +0200 |
3 |
+++ mezzanine_patched_smeserver-qpsmtpd-2.4.0/createlinks 2016-05-03 00:40:53.498383785 +0200 |
4 |
@@ -2,6 +2,17 @@ |
5 |
|
6 |
use esmith::Build::CreateLinks qw(:all); |
7 |
|
8 |
+foreach $event (qw( |
9 |
+ email-update |
10 |
+ domain-modify |
11 |
+ domain-create |
12 |
+ domain-delete |
13 |
+ bootstrap-console-save |
14 |
+ )) |
15 |
+{ |
16 |
+ event_link("domains-update-dkim", $event, "30"); |
17 |
+} |
18 |
+ |
19 |
my $service = "/var/service/qpsmtpd"; |
20 |
|
21 |
foreach $event (qw( |
22 |
@@ -40,11 +51,15 @@ |
23 |
ssl-update |
24 |
)); |
25 |
|
26 |
-templates2events("/etc/mail-dmarc.ini", qw( |
27 |
+templates2events($_, qw( |
28 |
bootstrap-console-save |
29 |
console-save |
30 |
email-update |
31 |
- )); |
32 |
+ )) |
33 |
+ for (qw( |
34 |
+ /etc/mail-dmarc.ini |
35 |
+ /home/e-smith/dkim_keys/default/selector |
36 |
+ )); |
37 |
|
38 |
my $secure_service = "/var/service/sqpsmtpd"; |
39 |
|
40 |
diff -Nur -x '*.orig' -x '*.rej' smeserver-qpsmtpd-2.4.0/root/etc/e-smith/events/actions/domains-update-dkim mezzanine_patched_smeserver-qpsmtpd-2.4.0/root/etc/e-smith/events/actions/domains-update-dkim |
41 |
--- smeserver-qpsmtpd-2.4.0/root/etc/e-smith/events/actions/domains-update-dkim 1970-01-01 01:00:00.000000000 +0100 |
42 |
+++ mezzanine_patched_smeserver-qpsmtpd-2.4.0/root/etc/e-smith/events/actions/domains-update-dkim 2016-05-03 00:40:53.499383785 +0200 |
43 |
@@ -0,0 +1,40 @@ |
44 |
+#!/usr/bin/perl -w |
45 |
+ |
46 |
+use esmith::DomainsDB; |
47 |
+use esmith::ConfigDB; |
48 |
+use File::Find; |
49 |
+ |
50 |
+my $d = esmith::DomainsDB->open_ro || die "Couldn't open the domains database"; |
51 |
+my $c = esmith::ConfigDB->open_ro || die "Couldn't open the configurtion database"; |
52 |
+ |
53 |
+my $qpsmtpd = $c->get('qpsmtpd'); |
54 |
+die "qpsmtpd service entry not found" unless ($qpsmtpd); |
55 |
+ |
56 |
+my $dkim_sign = $qpsmtpd->prop('DKIMSigning') || 'disabled'; |
57 |
+ |
58 |
+find({ wanted => \&wanted }, qw(/var/service/qpsmtpd/config/dkim/)); |
59 |
+ |
60 |
+# Build a list of domain for which we want to sign emails |
61 |
+my @dkim_domains = (); |
62 |
+ |
63 |
+if ($dkim_sign =~ m/^enabled|yes|1|on$/){ |
64 |
+ foreach my $dom ($d->domains){ |
65 |
+ next if ($dom->prop('DKIMSigning') || 'enabled') eq 'disabled'; |
66 |
+ next if ($dom->prop('MailServer')); |
67 |
+ push @dkim_domains, $dom->key; |
68 |
+ } |
69 |
+} |
70 |
+ |
71 |
+ |
72 |
+sub wanted{ |
73 |
+ my $domain = $d->get($_); |
74 |
+ if ( -l && !grep { $_ eq $domain->key } @dkim_domains ){ |
75 |
+ unlink $_; |
76 |
+ } |
77 |
+} |
78 |
+ |
79 |
+foreach my $dom (@dkim_domains){ |
80 |
+ next if (-e '/var/service/qpsmtpd/config/dkim/' . $dom); |
81 |
+ my $src = ( -e '/home/e-smith/dkim_keys/' . $dom ) ? '/home/e-smith/dkim_keys/' . $dom : '/home/e-smith/dkim_keys/default'; |
82 |
+ symlink $src, '/var/service/qpsmtpd/config/dkim/' . $dom; |
83 |
+} |
84 |
diff -Nur -x '*.orig' -x '*.rej' smeserver-qpsmtpd-2.4.0/root/etc/e-smith/templates/home/e-smith/dkim_keys/default/selector/template-begin mezzanine_patched_smeserver-qpsmtpd-2.4.0/root/etc/e-smith/templates/home/e-smith/dkim_keys/default/selector/template-begin |
85 |
--- smeserver-qpsmtpd-2.4.0/root/etc/e-smith/templates/home/e-smith/dkim_keys/default/selector/template-begin 1970-01-01 01:00:00.000000000 +0100 |
86 |
+++ mezzanine_patched_smeserver-qpsmtpd-2.4.0/root/etc/e-smith/templates/home/e-smith/dkim_keys/default/selector/template-begin 2016-05-03 00:40:53.499383785 +0200 |
87 |
@@ -0,0 +1 @@ |
88 |
+{ $qpsmtpd{'DKIMSelector'} || 'default' } |
89 |
diff -Nur -x '*.orig' -x '*.rej' smeserver-qpsmtpd-2.4.0/root/sbin/e-smith/qpsmtpd-print-dns mezzanine_patched_smeserver-qpsmtpd-2.4.0/root/sbin/e-smith/qpsmtpd-print-dns |
90 |
--- smeserver-qpsmtpd-2.4.0/root/sbin/e-smith/qpsmtpd-print-dns 1970-01-01 01:00:00.000000000 +0100 |
91 |
+++ mezzanine_patched_smeserver-qpsmtpd-2.4.0/root/sbin/e-smith/qpsmtpd-print-dns 2016-05-03 00:40:53.499383785 +0200 |
92 |
@@ -0,0 +1,54 @@ |
93 |
+#!/usr/bin/perl -w |
94 |
+ |
95 |
+use esmith::ConfigDB; |
96 |
+use esmith::DomainsDB; |
97 |
+my $c = esmith::ConfigDB->open_ro || die "Couldn't open the configuration database"; |
98 |
+my $d = esmith::DomainsDB->open_ro || die "Couldn't open the domains database"; |
99 |
+my $domain = shift || $c->get('DomainName')->value; |
100 |
+ |
101 |
+die "Domain $domain doesn't exist" |
102 |
+ unless ($d->get($domain) && $d->get($domain)->prop('type') eq 'domain'); |
103 |
+ |
104 |
+warn "DKIM Signing is disabled for domain $domain" |
105 |
+ if (($d->get($domain)->prop('DKIMSigning') || 'enabled') eq 'disabled'); |
106 |
+ |
107 |
+die "Can't find DKIM keys for domain $domain" |
108 |
+ unless (-e "/var/service/qpsmtpd/config/dkim/$domain/public"); |
109 |
+ |
110 |
+die "Can't find the selector for domain $domain" |
111 |
+ unless (-e "/var/service/qpsmtpd/config/dkim/$domain/selector"); |
112 |
+ |
113 |
+print <<'_EOF'; |
114 |
+ |
115 |
+Here are sample DNS entries you should add in your public DNS |
116 |
+The DKIM entry can be copied as is, but others will probably need to be adjusted |
117 |
+to your need. For example, you should either change the reporting email adress |
118 |
+for DMARC (or create the needed pseudonym) |
119 |
+ |
120 |
+_EOF |
121 |
+ |
122 |
+my $key_string = "v=DKIM1;o=~;t=y;r=dmarc-feedback\@$domain;p="; |
123 |
+open PUBKEY, "/var/service/qpsmtpd/config/dkim/$domain/public"; |
124 |
+while(<PUBKEY>){ |
125 |
+ next if /^\-/; |
126 |
+ chomp; |
127 |
+ $key_string .= $_; |
128 |
+} |
129 |
+close PUBKEY; |
130 |
+open SEL, "/var/service/qpsmtpd/config/dkim/$domain/selector"; |
131 |
+my $selector = <SEL>; |
132 |
+chomp $selector |
133 |
+close SEL; |
134 |
+ |
135 |
+my @key_chunks = ( $key_string =~ /.{1,255}/g ); |
136 |
+my $txt = ''; |
137 |
+$txt .= '"' . $_ . '"' foreach (@key_chunks); |
138 |
+ |
139 |
+print <<"_EOF"; |
140 |
+ |
141 |
+$selector._domainkey IN TXT $txt |
142 |
+\@ IN SPF "v=spf1 mx a -all" |
143 |
+\@ IN TXT "v=spf1 mx a -all" |
144 |
+_dmarc IN TXT "v=DMARC1; p=none; adkim=s; aspf=r; rua=mailto:dmarc-feedback\@$domain; pct=100" |
145 |
+ |
146 |
+_EOF |
147 |
diff -Nur -x '*.orig' -x '*.rej' smeserver-qpsmtpd-2.4.0/root/var/service/qpsmtpd/run mezzanine_patched_smeserver-qpsmtpd-2.4.0/root/var/service/qpsmtpd/run |
148 |
--- smeserver-qpsmtpd-2.4.0/root/var/service/qpsmtpd/run 2016-05-03 00:41:30.627369165 +0200 |
149 |
+++ mezzanine_patched_smeserver-qpsmtpd-2.4.0/root/var/service/qpsmtpd/run 2016-05-03 00:41:21.828372608 +0200 |
150 |
@@ -34,6 +34,15 @@ |
151 |
[ -e /var/service/qpsmtpd/ssl/dhparam.pem ] || \ |
152 |
RANDFILE=/dev/null /usr/bin/openssl dhparam -out /var/service/qpsmtpd/ssl/dhparam.pem 2048 |
153 |
|
154 |
+# Create a default dkim key pair |
155 |
+[ -e /home/e-smith/dkim_keys/default/private ] || (\ |
156 |
+ RANDFILE=/dev/null /usr/bin/openssl genrsa -out /home/e-smith/dkim_keys/default/private 2048 |
157 |
+ /usr/bin/openssl rsa -in /home/e-smith/dkim_keys/default/private \ |
158 |
+ -out /home/e-smith/dkim_keys/default/public -pubout |
159 |
+ chown qpsmtpd:qpsmtpd /home/e-smith/dkim_keys/default/private |
160 |
+ chmod 400 /home/e-smith/dkim_keys/default/private |
161 |
+) |
162 |
+ |
163 |
exec /usr/local/bin/softlimit -d ${SOFTLIMIT:-25000000} -s ${SOFTLIMIT:-25000000} -l ${SOFTLIMIT:-25000000} \ |
164 |
/usr/bin/qpsmtpd-forkserver \ |
165 |
-u qpsmtpd \ |