#!/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 "$@"