summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHayden Hamilton <hayden@hhvn.uk>2026-05-24 20:07:28 +0100
committerHayden Hamilton <hayden@hhvn.uk>2026-05-24 20:07:28 +0100
commitdd03f0590cc9006c5636a2812fed657f2b6b3754 (patch)
treec7a428351ac545a8edc2b9f1c7f9e8a5e7a4c428
parentcb1e27daaf675230563399ec447f322704f2afd4 (diff)
Add dkim/mkcert to generate DKIM certificates
-rwxr-xr-xdkim/mkcert51
1 files changed, 51 insertions, 0 deletions
diff --git a/dkim/mkcert b/dkim/mkcert
new file mode 100755
index 0000000..971496f
--- /dev/null
+++ b/dkim/mkcert
@@ -0,0 +1,51 @@
+#!/bin/rc
+
+# This script generates and stores DKIM keypair, using the correct user
+
+dir = /etc/mail/dkim
+user =_dkimsign_
+selector = $1
+privkey = $dir/$selector.priv.key
+pubkey = $dir/$selector.pub.key
+txt = $dir/$selector.txt
+
+if (!~ $#* 1) {
+ echo 'usage: mkcert <selector>'
+ exit 2
+}
+
+fn die {
+ echo fatal error: $* >[1=2]
+ exit 1
+}
+
+fn mustsucceed {
+ if (!$*) {
+ echo fatal error: essential command failed >[1=2]
+ cleanupfailed
+ exit 1
+ }
+}
+
+fn cleanupfailed {
+ as rm $privkey
+ as rm $pubkey
+ as rm $txt
+}
+
+fn as {
+ doas -u _dkimsign $*
+}
+
+as test -e $privkey && die $privkey already exists
+as test -e $pubkey && die $pubkey already exists
+as test -e $txt && die $txt already exists
+
+mustsucceed as mkdir -p $dir
+
+mustsucceed as openssl genrsa -out $privkey
+mustsucceed as openssl rsa -in $privkey -pubout | \
+ mustsucceed as tee $pubkey >/dev/null
+mustsucceed as cat $pubkey | \
+ mustsucceed as sed '1s/.*/v=DKIM1;p=/;:nl;${s/-----.*//;q;};N;s/\n//g;b nl;' | \
+ mustsucceed as tee $txt >/dev/null