chiark / gitweb /
Makefile: Fix one-based indexing properly.
[dnserr] / Makefile
1 ### -*-makefile-*-
2
3 BASE                     = distorted.org.uk
4 ZONE                     = dnserr.$(BASE)
5
6 KEYGEN                   = dnssec-keygen -aRSASHA256 -b1024 -r/dev/urandom -Kkey/
7 SIGNZONE                 = dnssec-signzone -S -Kkey/ -dds/
8 SIGVALID                 = -s20000101000000 -e20300101000000
9 SIGOLD                   = -s20000101000000 -e20010101000000
10
11 all:
12
13 DUMMY                    = refused wrong-ds
14 DUMMYZONES               = $(addsuffix .zone,$(DUMMY))
15 TARGETS                 += $(DUMMYZONES)
16 $(DUMMYZONES): %.zone: utils.m4 dummy.in
17         m4 -P -DBASE=$(BASE) >$@.new utils.m4 dummy.in
18         mv $@.new $@
19
20 TARGETS                 += dnserr.zone
21 dnserr.zone: utils.m4 config.m4 dnserr.in
22         m4 -P -DBASE=$(BASE) >$@.new utils.m4 dnserr.in
23         mv $@.new $@
24
25 KEYSTAMP                 = $(patsubst %,key/%.stamp, \
26                                 $(ZONE) \
27                                 $(addsuffix .$(ZONE),$(DUMMY)))
28 $(KEYSTAMP): key/%.stamp:
29         mkdir -p key
30         $(KEYGEN) -fKSK $*
31         $(KEYGEN) $*
32         touch $@
33 all: $(KEYSTAMP)
34 realclean::; rm -rf key/
35
36 DUMMYSIG                 = $(addsuffix .zone.sig,$(DUMMY))
37 TARGETS                 += $(DUMMYSIG)
38 $(DUMMYSIG): %.zone.sig: %.zone
39 wrong-ds.zone.sig: wrong-ds.zone key/wrong-ds.$(ZONE).stamp
40         mkdir -p ds/
41         $(SIGNZONE) $(SIGVALID) -owrong-ds.$(ZONE) -f$@ $<
42 clean::; rm -rf ds/
43
44 TARGETS                 += dnserr.zone.signew
45 dnserr.zone.signew: dnserr.zone key/$(ZONE).stamp
46         $(SIGNZONE) $(SIGVALID) -o$(ZONE) -f$@.bind $<
47         ldns-read-zone $@.bind >$@.new
48         rm $@.bind
49         mv $@.new $@
50
51 TARGETS                 += dnserr.zone.sigold
52 dnserr.zone.sigold: dnserr.zone key/$(ZONE).stamp
53         $(SIGNZONE) $(SIGOLD) -P -o$(ZONE) -f$@.bind $<
54         ldns-read-zone $@.bind >$@.new
55         rm $@.bind
56         mv $@.new $@
57
58 TARGETS                 += dnserr.zone.sig
59 OLDSIGMATCH              = $$1 == "expired-rrsig.$(ZONE)." && \
60                                 $$4 == "RRSIG" && ($$5 == "A" || $$5 == "AAAA")
61 BADSIGMATCH              = $$1 == "invalid-rrsig.$(ZONE)." && \
62                                 $$4 == "RRSIG" && ($$5 == "A" || $$5 == "AAAA")
63 CLEAN                   += t.oldsig
64 dnserr.zone.sig: dnserr.zone.sigold dnserr.zone.signew
65         awk '$(OLDSIGMATCH) { print; }' \
66                 dnserr.zone.sigold >t.oldsig
67         awk '$(OLDSIGMATCH) { \
68                 if (!doneoldsig) { system("cat t.oldsig"); doneoldsig = 1; } \
69                 next; \
70              } \
71              $(BADSIGMATCH) { \
72                 s = $$13; \
73                 for (i = length(s)/2; i > 0; i--) { \
74                   c = substr(s, i, 1); \
75                   if (c != tolower(c)) { c = tolower(c); break; } \
76                   else if (c != toupper(c)) { c = toupper(c); break; } \
77                 } \
78                 $$13 = substr(s, 1, i - 1) c substr(s, i + 1); \
79              } \
80              { print; }' \
81                 dnserr.zone.signew >$@.new
82         rm t.oldsig
83         mv $@.new $@
84
85 CLEAN                   += $(TARGETS)
86 all: $(TARGETS)
87 .PHONY: all
88
89 clean::; rm -f $(CLEAN)
90 realclean:: clean; rm -f $(REALCLEAN)
91 .PHONY: clean realclean