summaryrefslogtreecommitdiff
path: root/dkim/mkcert
blob: 971496f65b1f2053c0e925d941a406559d62b136 (plain)
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
#!/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