summaryrefslogtreecommitdiffstats
path: root/gen_canned.sh
blob: 2d305189df18b1f76d3afa3f7dc0ab8bf5e0fcfe (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
#!/bin/sh

# testzone
DOMAIN=ede.dn5.dk.
SERIAL=2025041804

gen_ede_zone(){
	local seq="$1"
	local tmpl="templates/$2"
	local zonefmt="$3"
	local zoneparam="$4"
	local ede_code="$5"
	local extra_text="$6"
	local zone="$(printf "$zonefmt" "$zoneparam")"
	local out="canned/${seq}_${zone}toml"
	cat "$tmpl" |
		sed -e "s/{qname}/$zone/g" |
		sed -e "s/{ede_code}/$ede_code/g" |
		sed -e "s/{ede_extra}/$extra_text/g" \
		> "$out"
}

gen_ede_zones(){
	local offset="$1"
	local tmpl="$2"
	local zonefmt="$3"

	gen_ede(){
		local ede_code="$1"
		local long_name="$2"
		local extra_text="$3"

		gen_ede_zone "$(( offset + ede_code ))" \
			"$tmpl" "$zonefmt" "$ede_code" \
			"$ede_code" "$extra_text"
		gen_ede_zone "$(( offset + 500 + ede_code ))" \
			"$tmpl" "$zonefmt" "$long_name" \
			"$ede_code" "$extra_text"
	}

	gen_ede 0 other-error 'Other Error aka. user error'
	gen_ede 1 unsupp-dnskey-algo 'Try a simpler algorithm'
	gen_ede 2 unsupp-ds-digest-type 'Try using another one'
	gen_ede 3 stale 'Zombie reply 🧟'
	gen_ede 4 forged 'Cloned reply'
	gen_ede 5 dnssec-indeterminate 'maybe secure'
	gen_ede 6 dnssec-bogus 'probably not secure'
	gen_ede 7 sig-expired 'signature expired 🥀'
	gen_ede 8 sig-in-future \
		'1st rule of time machines: Sharing is caring'
	gen_ede 9 dnskey-missing 'DNSKEY missing'
	gen_ede 10 rrsig-missing 'RRSIG missing'
	gen_ede 11 no-zone-key-bit 'Where did the zone key bit go?'
	gen_ede 12 nsec-missing 'No NSEC?'
	gen_ede 13 cached-error 'AFAIR 🤞'
	gen_ede 14 not-ready '💤'
	gen_ede 15 blocked '🚧 Blocked 🚧'
	gen_ede 16 censored '⛔ Censored ⛔'
	gen_ede 17 filtered '☂ Filtered ☂'
	gen_ede 18 prohibited \
		'🚫 You have requested a prohibited domain! 🚫'
	gen_ede 19 stale-nxdomain 'AFAIR 🤞'
	gen_ede 20 not-auth 'Not authoritative for this domain'
	gen_ede 21 not-supp 'Unsupported ✋'
	gen_ede 22 auth-ns-out-for-lunch 'TODO ✋'
	gen_ede 23 network-error '🔥🔥🔥'
	gen_ede 24 invalid-data 'Invalid data'
	gen_ede 25 sig-reversed-time \
		'Please reverse the flow of time before use.'
	gen_ede 26 too-early "Let's do a 🤝 first"
	gen_ede 27 unsupp-nsec3-iter 'Try using another iterator'
	gen_ede 28 bad-proxy-policy \
		"🛑 This service hasn't been vetted! 🛑"
	gen_ede 29 synthesized 'This query is a part of the conspiracy'
	gen_ede 30 invalid-query-type "You can't query this kind of RRs"
}

copy_can(){
	local file="$1"
	cp "static/$file" "canned/$file"
}

find_all_zones(){
	grep -h '^QName' canned/*.toml | cut -d'"' -f2 | sort | uniq
}

gen_nodata(){
	local all_zones="$(find_all_zones)"
	local i=9000
	for zone in $all_zones; do
		cat templates/nodata.toml |
			sed -e "s/{qname}/$zone/g" \
			> canned/${i}_nodata.toml
		i=$((i + 1))
	done
}

canned_replace(){
	local needle="$1"
	local replacement="$2"

	grep -l -R -F "$needle" canned/ |
		xargs -r -- sed -i -e "s/$needle/$replacement/g"
}

generate_files(){
	rm -rf canned/
	mkdir canned/
	cp static/* canned/
	gen_ede_zones 1000 ede-nx.toml "%s.nx.$DOMAIN"
	gen_ede_zones 2000 ede-cname.toml "%s.cname.$DOMAIN"
	gen_ede_zones 3000 ede-addr-a.toml "%s.addr.$DOMAIN"
	gen_ede_zones 4000 ede-addr-aaaa.toml "%s.addr.$DOMAIN"
	gen_nodata
	canned_replace '{serial}' "$SERIAL"
}

main(){
	generate_files
}

main "$@"