Codebase list unbound / upstream/1.11.0
New upstream version 1.11.0 Robert Edmonds 3 years ago
302 changed file(s) with 22890 addition(s) and 9895 deletion(s). Raw diff Collapse all Expand all
0 # These are supported funding model platforms
1
2 github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
3 patreon: # Replace with a single Patreon username
4 open_collective: # Replace with a single Open Collective username
5 ko_fi: # Replace with a single Ko-fi username
6 tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
7 community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
8 liberapay: # Replace with a single Liberapay username
9 issuehunt: # Replace with a single IssueHunt username
10 otechie: # Replace with a single Otechie username
0 github: [NLnetLabs]
111 custom: ['https://nlnetlabs.nl/funding/']
3636 /petal
3737 /pktview
3838 /streamtcp
39 /unbound-dnstap-socket
3940 /testbound
4041 /unittest
4142 /contrib/libunbound.pc
0 sudo: false
10 language: c
2 compiler:
3 - gcc
1
2 git:
3 depth: 5
4
45 addons:
56 apt:
67 packages:
89 - libevent-dev
910 - libexpat-dev
1011 - clang
12 homebrew:
13 packages:
14 - openssl
15 - libevent
16 - expat
17 update: true
18
19 jobs:
20 include:
21 - os: linux
22 name: GCC on Linux, Amd64
23 compiler: gcc
24 arch: amd64
25 env:
26 - CONFIG_OPTS="--enable-debug --disable-flto"
27 - os: linux
28 name: Clang on Linux, Amd64
29 compiler: clang
30 arch: amd64
31 env:
32 - CONFIG_OPTS="--enable-debug --disable-flto"
33 - os: osx
34 name: Clang on OS X, Amd64
35 compiler: clang
36 arch: amd64
37 env:
38 - TEST_OSX=yes
39 - CONFIG_OPTS="--enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl/"
40 - os: linux
41 name: Libevent, GCC on Linux, Amd64
42 compiler: gcc
43 arch: amd64
44 env:
45 - TEST_LIBEVENT=yes
46 - CONFIG_OPTS="--with-libevent"
47 - os: linux
48 name: Libevent, Clang on Linux, Amd64
49 compiler: clang
50 arch: amd64
51 env:
52 - TEST_LIBEVENT=yes
53 - CONFIG_OPTS="--with-libevent"
54 - os: osx
55 name: Libevent, Clang on OS X, Amd64
56 compiler: clang
57 arch: amd64
58 env:
59 - TEST_OSX=yes
60 - TEST_LIBEVENT=yes
61 - CONFIG_OPTS="--with-ssl=/usr/local/opt/openssl/ --with-libevent=/usr/local/opt/libevent/"
62 - os: linux
63 name: UBsan, GCC on Linux, Amd64
64 compiler: gcc
65 arch: amd64
66 dist: bionic
67 env:
68 - TEST_UBSAN=yes
69 - os: linux
70 name: UBsan, Clang on Linux, Amd64
71 compiler: clang
72 arch: amd64
73 dist: bionic
74 env:
75 - TEST_UBSAN=yes
76 - os: linux
77 name: Asan, GCC on Linux, Amd64
78 compiler: gcc
79 arch: amd64
80 dist: bionic
81 env:
82 - TEST_ASAN=yes
83 - os: linux
84 name: Asan, Clang on Linux, Amd64
85 compiler: clang
86 arch: amd64
87 dist: bionic
88 env:
89 - TEST_ASAN=yes
90 - os: linux
91 name: GCC on Linux, Aarch64
92 compiler: gcc
93 arch: arm64
94 dist: bionic
95 env:
96 - CONFIG_OPTS="--enable-debug --disable-flto"
97 - os: linux
98 name: Clang on Linux, Aarch64
99 compiler: clang
100 arch: arm64
101 dist: bionic
102 env:
103 - CONFIG_OPTS="--enable-debug --disable-flto"
104 - os: linux
105 name: GCC on Linux, PowerPC64
106 compiler: gcc
107 arch: ppc64le
108 dist: bionic
109 env:
110 - CONFIG_OPTS="--enable-debug --disable-flto"
111 - os: linux
112 name: Clang on Linux, PowerPC64
113 compiler: clang
114 arch: ppc64le
115 dist: bionic
116 env:
117 - CONFIG_OPTS="--enable-debug --disable-flto"
118 - os: linux
119 name: GCC on Linux, s390x
120 compiler: gcc
121 arch: s390x
122 dist: bionic
123 env:
124 - CONFIG_OPTS="--enable-debug --disable-flto"
125 - os: linux
126 name: Clang on Linux, s390x
127 compiler: clang
128 arch: s390x
129 dist: bionic
130 env:
131 - CONFIG_OPTS="--enable-debug --disable-flto"
132 - os: osx
133 osx_image: xcode10
134 name: Apple iPhone on iOS, armv7
135 compiler: clang
136 env:
137 - TEST_IOS=yes
138 - AUTOTOOLS_HOST=armv7-apple-ios
139 - OPENSSL_HOST=ios-cross
140 - IOS_SDK=iPhoneOS
141 - IOS_CPU=armv7s
142 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
143 - os: osx
144 osx_image: xcode10
145 name: Apple iPhone on iOS, arm64
146 compiler: clang
147 env:
148 - TEST_IOS=yes
149 - AUTOTOOLS_HOST=aarch64-apple-ios
150 - OPENSSL_HOST=ios64-cross
151 - IOS_SDK=iPhoneOS
152 - IOS_CPU=arm64
153 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
154 - os: osx
155 osx_image: xcode10
156 name: Apple TV on iOS, arm64
157 compiler: clang
158 env:
159 - TEST_IOS=yes
160 - AUTOTOOLS_HOST=aarch64-apple-ios
161 - OPENSSL_HOST=ios64-cross
162 - IOS_SDK=AppleTVOS
163 - IOS_CPU=arm64
164 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
165 - os: osx
166 osx_image: xcode10
167 name: Apple Watch on iOS, armv7
168 compiler: clang
169 env:
170 - TEST_IOS=yes
171 - AUTOTOOLS_HOST=armv7-apple-ios
172 - OPENSSL_HOST=ios-cross
173 - IOS_SDK=WatchOS
174 - IOS_CPU=armv7k
175 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
176 - os: osx
177 osx_image: xcode10
178 name: iPhoneSimulator on OS X, i386
179 env:
180 - TEST_IOS=yes
181 - AUTOTOOLS_HOST=i386-apple-ios
182 - OPENSSL_HOST=iphoneos-cross
183 - IOS_CPU=i386
184 - IOS_SDK=iPhoneSimulator
185 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
186 - os: osx
187 osx_image: xcode10
188 name: iPhoneSimulator on OS X, x86_64
189 env:
190 - TEST_IOS=yes
191 - AUTOTOOLS_HOST=x86_64-apple-ios
192 - OPENSSL_HOST=iphoneos-cross
193 - IOS_CPU=x86_64
194 - IOS_SDK=iPhoneSimulator
195 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
196 - os: osx
197 osx_image: xcode10
198 name: AppleTVSimulator on OS X, x86_64
199 env:
200 - TEST_IOS=yes
201 - AUTOTOOLS_HOST=x86_64-apple-ios
202 - OPENSSL_HOST=iphoneos-cross
203 - IOS_CPU=x86_64
204 - IOS_SDK=AppleTVSimulator
205 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
206 - os: osx
207 osx_image: xcode10
208 name: WatchSimulator on OS X, i386
209 env:
210 - TEST_IOS=yes
211 - AUTOTOOLS_HOST=i386-apple-ios
212 - OPENSSL_HOST=iphoneos-cross
213 - IOS_CPU=i386
214 - IOS_SDK=WatchSimulator
215 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
216 - os: linux
217 name: Android armv7a, Linux, Amd64
218 compiler: clang
219 arch: amd64
220 dist: bionic
221 env:
222 - TEST_ANDROID=yes
223 - AUTOTOOLS_HOST=armv7a-linux-androideabi
224 - OPENSSL_HOST=android-arm
225 - ANDROID_CPU=armv7a
226 - ANDROID_API=23
227 - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU"
228 - ANDROID_SDK_ROOT="$HOME/android-sdk"
229 - ANDROID_NDK_ROOT="$HOME/android-ndk"
230 - os: linux
231 name: Android aarch64, Linux, Amd64
232 compiler: clang
233 arch: amd64
234 dist: bionic
235 env:
236 - TEST_ANDROID=yes
237 - AUTOTOOLS_HOST=aarch64-linux-android
238 - OPENSSL_HOST=android-arm64
239 - ANDROID_CPU=aarch64
240 - ANDROID_API=23
241 - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU"
242 - ANDROID_SDK_ROOT="$HOME/android-sdk"
243 - ANDROID_NDK_ROOT="$HOME/android-ndk"
244 - os: linux
245 name: Android x86, Linux, Amd64
246 compiler: clang
247 arch: amd64
248 dist: bionic
249 env:
250 - TEST_ANDROID=yes
251 - AUTOTOOLS_HOST=i686-linux-android
252 - OPENSSL_HOST=android-x86
253 - ANDROID_CPU=x86
254 - ANDROID_API=23
255 - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU"
256 - ANDROID_SDK_ROOT="$HOME/android-sdk"
257 - ANDROID_NDK_ROOT="$HOME/android-ndk"
258 - os: linux
259 name: Android x86_64, Linux, Amd64
260 compiler: clang
261 arch: amd64
262 dist: bionic
263 env:
264 - TEST_ANDROID=yes
265 - AUTOTOOLS_HOST=x86_64-linux-android
266 - OPENSSL_HOST=android-x86_64
267 - ANDROID_CPU=x86_64
268 - ANDROID_API=23
269 - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU"
270 - ANDROID_SDK_ROOT="$HOME/android-sdk"
271 - ANDROID_NDK_ROOT="$HOME/android-ndk"
272
273 allow_failures:
274 - os: linux
275 name: Android armv7a, Linux, Amd64
276 - os: linux
277 name: Android aarch64, Linux, Amd64
278 - os: linux
279 name: Android x86, Linux, Amd64
280 - os: linux
281 name: Android x86_64, Linux, Amd64
282
283 before_script:
284 - |
285 if [ "$TEST_ANDROID" = "yes" ]; then
286 ./contrib/android/install_tools.sh
287 elif [ "$TEST_IOS" = "yes" ]; then
288 ./contrib/ios/install_tools.sh
289 fi
290
291 # The Travis docs say to avoid calling exit in the script. It leads to
292 # some code duplication to avoid failures in cross-compiles. Also see
293 # https://docs.travis-ci.com/user/job-lifecycle/ in the Travis docs.
11294 script:
12 - ./configure --enable-debug --disable-flto
13 - make
14 - make test
15 - (cd testdata/clang-analysis.tdir; bash clang-analysis.test)
295 - |
296 if [ "$TEST_UBSAN" = "yes" ]; then
297 export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover"
298 ./configure
299 make -j 2
300 make test
301 elif [ "$TEST_ASAN" = "yes" ]; then
302 export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address"
303 ./configure
304 make -j 2
305 make test
306 elif [ "$TEST_IOS" = "yes" ]; then
307 export AUTOTOOLS_BUILD="$(./config.guess)"
308 export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig"
309 source ./contrib/ios/setenv_ios.sh
310 ./contrib/ios/install_openssl.sh
311 ./contrib/ios/install_expat.sh
312 ./configure \
313 --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \
314 --prefix="$IOS_PREFIX" \
315 --with-ssl="$IOS_PREFIX" --disable-gost \
316 --with-libexpat="$IOS_PREFIX";
317 make -j 2
318 make install
319 elif [ "$TEST_ANDROID" = "yes" ]; then
320 export AUTOTOOLS_BUILD="$(./config.guess)"
321 export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig"
322 ./contrib/android/install_ndk.sh
323 source ./contrib/android/setenv_android.sh
324 ./contrib/android/install_openssl.sh
325 ./contrib/android/install_expat.sh
326 ./configure \
327 --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \
328 --prefix="$ANDROID_PREFIX" \
329 --with-ssl="$ANDROID_PREFIX" --disable-gost \
330 --with-libexpat="$ANDROID_PREFIX";
331 make -j 2
332 make install
333 elif [ "$TEST_OSX" = "yes" ]; then
334 ./configure --enable-debug --disable-flto --with-ssl=/usr/local/opt/openssl/
335 make -j 2
336 make test
337 (cd testdata/clang-analysis.tdir; bash clang-analysis.test)
338 else
339 ./configure ${CONFIG_OPTS}
340 make -j 2
341 make test
342 (cd testdata/clang-analysis.tdir; bash clang-analysis.test)
343 fi
2424 DNSTAP_OBJ=@DNSTAP_OBJ@
2525 DNSCRYPT_SRC=@DNSCRYPT_SRC@
2626 DNSCRYPT_OBJ=@DNSCRYPT_OBJ@
27 WITH_DYNLIBMODULE=@WITH_DYNLIBMODULE@
2728 WITH_PYTHONMODULE=@WITH_PYTHONMODULE@
2829 WITH_PYUNBOUND=@WITH_PYUNBOUND@
2930 PY_MAJOR_VERSION=@PY_MAJOR_VERSION@
7677 LINTFLAGS=+quiet -weak -warnposix -unrecog -Din_addr_t=uint32_t -Du_int=unsigned -Du_char=uint8_t -preproc -Drlimit=rlimit64 -D__gnuc_va_list=va_list -formatcode
7778 #-Dglob64=glob -Dglobfree64=globfree
7879 # compat with openssl linux edition.
79 LINTFLAGS+="-DBN_ULONG=unsigned long" -Dkrb5_int32=int "-Dkrb5_ui_4=unsigned int" -DPQ_64BIT=uint64_t -DRC4_INT=unsigned -fixedformalarray -D"ENGINE=unsigned" -D"RSA=unsigned" -D"DSA=unsigned" -D"EVP_PKEY=unsigned" -D"EVP_MD=unsigned" -D"SSL=unsigned" -D"SSL_CTX=unsigned" -D"X509=unsigned" -D"RC4_KEY=unsigned" -D"EVP_MD_CTX=unsigned" -D"ECDSA_SIG=DSA_SIG" -Dfstrm_res=int
80 LINTFLAGS+="-DBN_ULONG=unsigned long" -Dkrb5_int32=int "-Dkrb5_ui_4=unsigned int" -DPQ_64BIT=uint64_t -DRC4_INT=unsigned -fixedformalarray -D"ENGINE=unsigned" -D"RSA=unsigned" -D"DSA=unsigned" -D"EVP_PKEY=unsigned" -D"EVP_MD=unsigned" -D"SSL=unsigned" -D"SSL_CTX=unsigned" -D"X509=unsigned" -D"RC4_KEY=unsigned" -D"EVP_MD_CTX=unsigned" -D"ECDSA_SIG=DSA_SIG"
8081 # compat with NetBSD
8182 LINTFLAGS+=@NETBSD_LINTFLAGS@
8283 # compat with OpenBSD
8586 LINTFLAGS+="-D__uint16_t=uint16_t" "-DEVP_PKEY_ASN1_METHOD=int" "-D_RuneLocale=int" "-D__va_list=va_list" "-D__uint32_t=uint32_t" "-D_Alignof(x)=x" "-D__aligned(x)=" "-D__requires_exclusive(x)=" "-D__requires_unlocked(x)=" "-D__locks_exclusive(x)=" "-D__trylocks_exclusive(x)=" "-D__unlocks(x)=" "-D__locks_shared(x)=" "-D__trylocks_shared(x)="
8687
8788 INSTALL=$(SHELL) $(srcdir)/install-sh
89
90 DYNLIBMOD_SRC=dynlibmod/dynlibmod.c
91 DYNLIBMOD_OBJ=@DYNLIBMOD_OBJ@
92 DYNLIBMOD_HEADER=@DYNLIBMOD_HEADER@
93 DYNLIBMOD_EXTRALIBS=@DYNLIBMOD_EXTRALIBS@
94
8895
8996 #pythonmod.c is not here, it is mentioned by itself in its own rules,
9097 #makedepend fails on missing interface.h otherwise.
139146 validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \
140147 val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \
141148 $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \
142 $(IPSECMOD_OBJ) $(IPSET_OBJ) respip.lo
149 $(IPSECMOD_OBJ) $(IPSET_OBJ) $(DYNLIBMOD_OBJ) respip.lo
143150 COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \
144151 outside_network.lo
145152 COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo
218225 $(SLDNS_OBJ)
219226 ASYNCLOOK_SRC=testcode/asynclook.c
220227 ASYNCLOOK_OBJ=asynclook.lo
221 ASYNCLOOK_OBJ_LINK=$(ASYNCLOOK_OBJ) log.lo locks.lo $(COMPAT_OBJ) @ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ@
228 ASYNCLOOK_OBJ_LINK=$(ASYNCLOOK_OBJ) log.lo locks.lo $(CHECKLOCK_OBJ) $(COMPAT_OBJ) @ASYNCLOOK_ALLOCCHECK_EXTRA_OBJ@
222229 STREAMTCP_SRC=testcode/streamtcp.c
223230 STREAMTCP_OBJ=streamtcp.lo
224231 STREAMTCP_OBJ_LINK=$(STREAMTCP_OBJ) worker_cb.lo $(COMMON_OBJ) $(COMPAT_OBJ) \
232239 $(SLDNS_OBJ)
233240 IPSET_SRC=@IPSET_SRC@
234241 IPSET_OBJ=@IPSET_OBJ@
242 DNSTAP_SOCKET_SRC=dnstap/unbound-dnstap-socket.c
243 DNSTAP_SOCKET_OBJ=unbound-dnstap-socket.lo
244 DNSTAP_SOCKET_OBJ_LINK=$(DNSTAP_SOCKET_OBJ) $(COMMON_OBJ) \
245 $(COMPAT_OBJ) $(SLDNS_OBJ)
235246 LIBUNBOUND_SRC=libunbound/context.c libunbound/libunbound.c \
236247 libunbound/libworker.c
237248 LIBUNBOUND_OBJ=context.lo libunbound.lo libworker.lo ub_event_pluggable.lo
258269 $(TESTBOUND_SRC) $(LOCKVERIFY_SRC) $(PKTVIEW_SRC) \
259270 $(MEMSTATS_SRC) $(CHECKCONF_SRC) $(LIBUNBOUND_SRC) $(HOST_SRC) \
260271 $(ASYNCLOOK_SRC) $(STREAMTCP_SRC) $(PERF_SRC) $(DELAYER_SRC) \
261 $(CONTROL_SRC) $(UBANCHOR_SRC) $(PETAL_SRC) \
272 $(CONTROL_SRC) $(UBANCHOR_SRC) $(PETAL_SRC) $(DNSTAP_SOCKET_SRC)\
262273 $(PYTHONMOD_SRC) $(PYUNBOUND_SRC) $(WIN_DAEMON_THE_SRC) \
263274 $(SVCINST_SRC) $(SVCUNINST_SRC) $(ANCHORUPD_SRC) $(SLDNS_SRC)
264275
266277 $(TESTBOUND_OBJ) $(LOCKVERIFY_OBJ) $(PKTVIEW_OBJ) \
267278 $(MEMSTATS_OBJ) $(CHECKCONF_OBJ) $(LIBUNBOUND_OBJ) $(HOST_OBJ) \
268279 $(ASYNCLOOK_OBJ) $(STREAMTCP_OBJ) $(PERF_OBJ) $(DELAYER_OBJ) \
269 $(CONTROL_OBJ) $(UBANCHOR_OBJ) $(PETAL_OBJ) \
280 $(CONTROL_OBJ) $(UBANCHOR_OBJ) $(PETAL_OBJ) $(DNSTAP_SOCKET_OBJ)\
270281 $(COMPAT_OBJ) $(PYUNBOUND_OBJ) \
271282 $(SVCINST_OBJ) $(SVCUNINST_OBJ) $(ANCHORUPD_OBJ) $(SLDNS_OBJ)
272283
305316 TEST_BIN=asynclook$(EXEEXT) delayer$(EXEEXT) \
306317 lock-verify$(EXEEXT) memstats$(EXEEXT) perf$(EXEEXT) \
307318 petal$(EXEEXT) pktview$(EXEEXT) streamtcp$(EXEEXT) \
319 unbound-dnstap-socket$(EXEEXT) \
308320 testbound$(EXEEXT) unittest$(EXEEXT)
309321 tests: all $(TEST_BIN)
310322
314326 test: unittest$(EXEEXT) testbound$(EXEEXT)
315327 ./unittest$(EXEEXT)
316328 ./testbound$(EXEEXT) -s
317 for x in $(srcdir)/testdata/*.rpl; do echo -n "$$x "; if ./testbound$(EXEEXT) -p $$x >/dev/null 2>&1; then echo OK; else echo failed; exit 1; fi done
329 for x in $(srcdir)/testdata/*.rpl; do printf "%s" "$$x "; if ./testbound$(EXEEXT) -p $$x >/dev/null 2>&1; then echo OK; else echo failed; exit 1; fi done
318330 @echo test OK
319331
320332 longtest: tests
327339 $(LINK_LIB) $(UBSYMS) -o $@ $(LIBUNBOUND_OBJ_LINK) -rpath $(libdir) $(SSLLIB) $(LIBS)
328340
329341 unbound$(EXEEXT): $(DAEMON_OBJ_LINK) libunbound.la
330 $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS)
342 $(LINK) -o $@ $(DAEMON_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
331343
332344 unbound-checkconf$(EXEEXT): $(CHECKCONF_OBJ_LINK) libunbound.la
333 $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS)
345 $(LINK) -o $@ $(CHECKCONF_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
334346
335347 unbound-control$(EXEEXT): $(CONTROL_OBJ_LINK) libunbound.la
336 $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS)
348 $(LINK) -o $@ $(CONTROL_OBJ_LINK) $(EXTRALINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
337349
338350 unbound-host$(EXEEXT): $(HOST_OBJ_LINK) libunbound.la
339351 $(LINK) -o $@ $(HOST_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS)
351363 $(LINK) -o $@ $(ANCHORUPD_OBJ_LINK) -L. -L.libs -lunbound $(LIBS)
352364
353365 unittest$(EXEEXT): $(UNITTEST_OBJ_LINK)
354 $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS)
366 $(LINK) -o $@ $(UNITTEST_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
355367
356368 testbound$(EXEEXT): $(TESTBOUND_OBJ_LINK)
357 $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS)
369 $(LINK) -o $@ $(TESTBOUND_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
358370
359371 lock-verify$(EXEEXT): $(LOCKVERIFY_OBJ_LINK)
360 $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS)
372 $(LINK) -o $@ $(LOCKVERIFY_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
361373
362374 petal$(EXEEXT): $(PETAL_OBJ_LINK)
363375 $(LINK) -o $@ $(PETAL_OBJ_LINK) $(SSLLIB) $(LIBS)
364376
365377 pktview$(EXEEXT): $(PKTVIEW_OBJ_LINK)
366 $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS)
378 $(LINK) -o $@ $(PKTVIEW_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
367379
368380 memstats$(EXEEXT): $(MEMSTATS_OBJ_LINK)
369 $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS)
381 $(LINK) -o $@ $(MEMSTATS_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
370382
371383 asynclook$(EXEEXT): $(ASYNCLOOK_OBJ_LINK) libunbound.la
372384 $(LINK) -o $@ $(ASYNCLOOK_OBJ_LINK) -L. -L.libs -lunbound $(SSLLIB) $(LIBS)
373385
374386 streamtcp$(EXEEXT): $(STREAMTCP_OBJ_LINK)
375 $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS)
387 $(LINK) -o $@ $(STREAMTCP_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
376388
377389 perf$(EXEEXT): $(PERF_OBJ_LINK)
378 $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS)
390 $(LINK) -o $@ $(PERF_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
379391
380392 delayer$(EXEEXT): $(DELAYER_OBJ_LINK)
381 $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS)
393 $(LINK) -o $@ $(DELAYER_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
382394
383395 signit$(EXEEXT): testcode/signit.c
384396 $(CC) $(CPPFLAGS) $(CFLAGS) @PTHREAD_CFLAGS_ONLY@ -o $@ testcode/signit.c $(LDFLAGS) -lldns $(SSLLIB) $(LIBS)
400412 @-if test ! -d dnstap; then $(INSTALL) -d dnstap; fi
401413 $(PROTOC_C) --c_out=. --proto_path=$(srcdir) $(srcdir)/dnstap/dnstap.proto
402414
415 unbound-dnstap-socket$(EXEEXT): $(DNSTAP_SOCKET_OBJ_LINK)
416 $(LINK) -o $@ $(DNSTAP_SOCKET_OBJ_LINK) $(SSLLIB) $(LIBS) $(DYNLIBMOD_EXTRALIBS)
417
403418 dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h
419 dtstream.lo dtstream.o: $(srcdir)/dnstap/dtstream.c config.h $(srcdir)/dnstap/dtstream.h
420 dnstap_fstrm.lo dnstap_fstrm.o: $(srcdir)/dnstap/dnstap_fstrm.c config.h $(srcdir)/dnstap/dnstap_fstrm.h
421 unbound-dnstap-socket.lo unbound-dnstap-socket.o: $(srcdir)/dnstap/unbound-dnstap-socket.c config.h $(srcdir)/dnstap/dtstream.h
404422
405423 # dnscrypt
406424 dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h \
454472 rm -f unbound$(EXEEXT) unbound-checkconf$(EXEEXT) unbound-host$(EXEEXT) unbound-control$(EXEEXT) unbound-anchor$(EXEEXT) unbound-control-setup libunbound.la unbound.h
455473 rm -f $(ALL_SRC:.c=.lint)
456474 rm -f _unbound.la libunbound/python/libunbound_wrap.c libunbound/python/unbound.py pythonmod/interface.h pythonmod/unboundmodule.py
475 rm -f libunbound.a
457476 rm -rf autom4te.cache .libs build doc/html doc/xml
458477
459478 distclean: clean
628647 -e 's?$$(srcdir)/pythonmod/pythonmod.h?$$(PYTHONMOD_HEADER)?g' \
629648 -e 's?$$(srcdir)/edns-subnet/subnetmod.h $$(srcdir)/edns-subnet/subnet-whitelist.h $$(srcdir)/edns-subnet/edns-subnet.h $$(srcdir)/edns-subnet/addrtree.h?$$(SUBNET_HEADER)?g' \
630649 -e 's?$$(srcdir)/ipsecmod/ipsecmod.h $$(srcdir)/ipsecmod/ipsecmod-whitelist.h?$$(IPSECMOD_HEADER)?g' \
650 -e 's?$$(srcdir)/dynlibmod/dynlibmod.h?$$(DYNLIBMOD_HEADER)?g' \
631651 -e 's!\(.*\)\.o[ :]*!\1.lo \1.o: !g' \
632652 > $(DEPEND_TMP)
633653 cp $(DEPEND_TARGET) $(DEPEND_TMP2)
795815 $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
796816 $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
797817 $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \
798 $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \
799 $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \
800 $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \
801 $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \
802 $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \
803 $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h
818 $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
819 $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/dns64/dns64.h \
820 $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/validator/validator.h \
821 $(srcdir)/validator/val_utils.h $(srcdir)/respip/respip.h $(srcdir)/services/localzone.h \
822 $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h \
823 $(srcdir)/util/storage/slabhash.h $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h \
824 $(srcdir)/ipset/ipset.h $(srcdir)/dynlibmod/dynlibmod.h
804825 view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(srcdir)/util/rbtree.h \
805826 $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/localzone.h $(srcdir)/util/storage/dnstree.h \
806827 $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \
885906 $(srcdir)/validator/val_secalgo.h
886907 fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \
887908 $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \
888 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h \
889 $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
890 $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
891 $(srcdir)/services/modstack.h $(srcdir)/services/rpz.h $(srcdir)/services/localzone.h \
892 $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/sldns/sbuffer.h \
893 $(srcdir)/util/config_file.h $(srcdir)/services/authzone.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h \
894 $(srcdir)/libunbound/unbound.h $(srcdir)/respip/respip.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \
895 $(srcdir)/services/outside_network.h $(srcdir)/services/cache/infra.h \
896 $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h \
897 $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \
898 $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h \
899 $(srcdir)/validator/val_nsec3.h $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h \
900 $(srcdir)/validator/val_neg.h $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h \
901 $(srcdir)/libunbound/context.h $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound-event.h \
902 $(srcdir)/libunbound/worker.h
909 $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h \
910 $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
911 $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \
912 $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \
913 $(srcdir)/services/outside_network.h $(srcdir)/services/localzone.h \
914 $(srcdir)/util/storage/dnstree.h $(srcdir)/services/view.h $(srcdir)/services/authzone.h \
915 $(srcdir)/services/cache/infra.h $(srcdir)/util/rtt.h $(srcdir)/services/cache/rrset.h \
916 $(srcdir)/util/storage/slabhash.h $(srcdir)/dns64/dns64.h $(srcdir)/iterator/iterator.h \
917 $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h $(srcdir)/validator/validator.h \
918 $(srcdir)/validator/val_utils.h $(srcdir)/validator/val_anchor.h $(srcdir)/validator/val_nsec3.h \
919 $(srcdir)/validator/val_sigcrypt.h $(srcdir)/validator/val_kentry.h $(srcdir)/validator/val_neg.h \
920 $(srcdir)/validator/autotrust.h $(srcdir)/libunbound/libworker.h $(srcdir)/libunbound/context.h \
921 $(srcdir)/util/alloc.h $(srcdir)/libunbound/unbound.h $(srcdir)/libunbound/unbound-event.h \
922 $(srcdir)/libunbound/worker.h $(srcdir)/sldns/sbuffer.h $(srcdir)/util/config_file.h $(srcdir)/respip/respip.h \
923 $(PYTHONMOD_HEADER) $(srcdir)/ipsecmod/ipsecmod.h $(srcdir)/edns-subnet/subnetmod.h $(srcdir)/util/net_help.h \
924 $(srcdir)/edns-subnet/addrtree.h $(srcdir)/edns-subnet/edns-subnet.h $(srcdir)/ipset/ipset.h \
925 $(srcdir)/dynlibmod/dynlibmod.h
903926 locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h
904927 log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h
905928 mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \
11071130 $(srcdir)/util/regional.h
11081131 checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
11091132 $(srcdir)/testcode/checklocks.h
1133 dnstap.lo dnstap.o: $(srcdir)/dnstap/dnstap.c config.h $(srcdir)/sldns/sbuffer.h \
1134 $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \
1135 $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
1136 $(srcdir)/util/locks.h $(srcdir)/dnstap/dnstap.h \
1137 dnstap/dnstap.pb-c.h
1138 dnstap.pb-c.lo dnstap.pb-c.o: dnstap/dnstap.pb-c.c dnstap/dnstap.pb-c.h \
1139
1140 dynlibmod.lo dynlibmod.o: $(srcdir)/dynlibmod/dynlibmod.c config.h $(srcdir)/dynlibmod/dynlibmod.h \
1141 $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
1142 $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \
1143 $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/rbtree.h\
1144 $(srcdir)/util/storage/dnstree.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h \
1145 $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/util/tube.h \
1146 $(srcdir)/services/mesh.h $(srcdir)/services/modstack.h $(srcdir)/util/regional.h $(srcdir)/util/net_help.h \
1147 $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h $(srcdir)/sldns/wire2str.h
1148 dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h $(srcdir)/sldns/sbuffer.h \
1149 $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \
1150 $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \
1151 $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \
1152 $(srcdir)/util/storage/lookup3.h
11101153 ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h
1154 ipset.lo ipset.o: $(srcdir)/ipset/ipset.c config.h $(srcdir)/ipset/ipset.h $(srcdir)/util/module.h \
1155 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \
1156 $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
1157 $(srcdir)/sldns/rrdef.h $(srcdir)/util/regional.h $(srcdir)/util/config_file.h $(srcdir)/services/cache/dns.h \
1158 $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/wire2str.h $(srcdir)/sldns/parseutil.h
11111159 ipsecmod-whitelist.lo ipsecmod-whitelist.o: $(srcdir)/ipsecmod/ipsecmod-whitelist.c config.h
11121160 unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \
11131161 $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/testcode/unitmain.h \
0 # Travis Testing
1
2 Unbound 1.10 and above leverage Travis CI to increase coverage of compilers and platforms. Compilers include Clang and GCC; while platforms include Android, iOS, Linux, and OS X on AMD64, Aarch64, PowerPC and s390x hardware.
3
4 Android is tested on armv7a, aarch64, x86 and x86_64. The Android recipes build and install OpenSSL and Expat, and then builds Unbound. The testing is tailored for Android NDK-r19 and above, and includes NDK-r20 and NDK-r21. Mips and Mips64 are not tested because they are no longer supported under current NDKs.
5
6 iOS is tested for iPhoneOS, WatchOS, AppleTVOS, iPhoneSimulator, AppleTVSimulator and WatchSimulator. The testing uses Xcode 10 on OS X 10.13.
7
8 The Unbound Travis configuration file `.travis.yml` does not use top-level keys like `os:` and `compiler:` so there is no matrix expansion. Instead Unbound specifies the exact job to run under the `jobs:` and `include:` keys.
9
10 ## Typical recipe
11
12 A typical recipe tests Clang and GCC on various hardware. The hardware includes AMD64, Aarch64, PowerPC and s390x. PowerPC is a little-endian platform, and s390x is a big-endian platform. There are pairs of recipes that are similar to the following.
13
14 ```
15 - os: linux
16 name: GCC on Linux, Aarch64
17 compiler: gcc
18 arch: arm64
19 dist: bionic
20 - os: linux
21 name: Clang on Linux, Aarch64
22 compiler: clang
23 arch: arm64
24 dist: bionic
25 ```
26
27 OS X provides a single recipe to test Clang. GCC is not tested because GCC is an alias for Clang.
28
29 ## Sanitizer builds
30
31 Two sanitizer builds are tested using Clang and GCC, for a total of four builds. The first sanitizer is Undefined Behavior sanitizer (UBsan), and the second is Address sanitizer (Asan). The sanitizers are only run on AMD64 hardware. Note the environment includes `TEST_UBSAN=yes` or `TEST_ASAN=yes` for the sanitizer builds.
32
33 The recipes are similar to the following.
34
35 ```
36 - os: linux
37 name: UBsan, GCC on Linux, Amd64
38 compiler: gcc
39 arch: amd64
40 dist: bionic
41 env: TEST_UBSAN=yes
42 - os: linux
43 name: UBsan, Clang on Linux, Amd64
44 compiler: clang
45 arch: amd64
46 dist: bionic
47 env: TEST_UBSAN=yes
48 ```
49
50 When the Travis script encounters a sanitizer it uses different `CFLAGS` and configuration string.
51
52 ```
53 if [ "$TEST_UBSAN" = "yes" ]; then
54 export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=undefined -fno-sanitize-recover"
55 ./configure
56 make -j 2
57 make test
58 elif [ "$TEST_ASAN" = "yes" ]; then
59 export CFLAGS="-DNDEBUG -g2 -O3 -fsanitize=address"
60 ./configure
61 make -j 2
62 make test
63 ...
64 ```
65
66 ## Android builds
67
68 Travis tests Android builds for the armv7a, aarch64, x86 and x86_64 architectures. The builds are trickier than other builds for several reasons. The testing requires installation of the Android NDK and SDK, it requires a cross-compile, and requires OpenSSL and Expat prerequisites. The Android cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the Android recipes.
69
70 ### Android job
71
72 The first step sets environmental variables for the cross-compile using the Travis job. A typical job with variables is shown below.
73
74 ```
75 - os: linux
76 name: Android armv7a, Linux, Amd64
77 compiler: clang
78 arch: amd64
79 dist: bionic
80 env:
81 - TEST_ANDROID=yes
82 - AUTOTOOLS_HOST=armv7a-linux-androideabi
83 - OPENSSL_HOST=android-arm
84 - ANDROID_CPU=armv7a
85 - ANDROID_API=23
86 - ANDROID_PREFIX="$HOME/android$ANDROID_API-$ANDROID_CPU"
87 - ANDROID_SDK_ROOT="$HOME/android-sdk"
88 - ANDROID_NDK_ROOT="$HOME/android-ndk"
89 ```
90
91 ### ANDROID_NDK_ROOT
92
93 The second step for Android is to set the environmental variables `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT`. This is an important step because the NDK and SDK use the variables internally to locate their own tools. Also see [Recommended NDK Directory?](https://groups.google.com/forum/#!topic/android-ndk/qZjhOaynHXc) on the android-ndk mailing list. (Many folks miss this step, or use incorrect variables like `ANDROID_NDK_HOME` or `ANDROID_SDK_HOME`).
94
95 If you are working from a developer machine you probably already have the necessary tools installed. You should ensure `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` are set properly.
96
97 ### Tool installation
98
99 The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/android/install_tools.sh`. The tools include curl, tar, zip, unzip and java.
100
101 ```
102 before_script:
103 - |
104 if [ "$TEST_ANDROID" = "yes" ]; then
105 ./contrib/android/install_tools.sh
106 elif [ "$TEST_IOS" = "yes" ]; then
107 ./contrib/ios/install_tools.sh
108 fi
109 ```
110
111 ### NDK installation
112
113 The third step installs the NDK and SDK. This step is handled in by the script `contrib/android/install_ndk.sh`. The script uses `ANDROID_NDK_ROOT` and `ANDROID_SDK_ROOT` to place the NDK and SDK in the `$HOME` directory.
114
115 If you are working from a developer machine you probably already have a NDK and SDK installed.
116
117 ### Android environment
118
119 The fourth step sets the Android cross-compile environment using the script `contrib/android/setenv_android.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so Android headers and libraries are found; and adds the path to the toolchain to `PATH`.
120
121 `contrib/android/setenv_android.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `ANDROID_CPU` and `ANDROID_API` tell `contrib/android/setenv_android.sh` which tools and libraries to select.
122
123 The `contrib/android/setenv_android.sh` script specifies the tools in a `case` statement like the following. There is a case for each of the architectures armv7a, aarch64, x86 and x86_64.
124
125 ```
126 armv8a|aarch64|arm64|arm64-v8a)
127 CC="aarch64-linux-android$ANDROID_API-clang"
128 CXX="aarch64-linux-android$ANDROID_API-clang++"
129 LD="aarch64-linux-android-ld"
130 AS="aarch64-linux-android-as"
131 AR="aarch64-linux-android-ar"
132 RANLIB="aarch64-linux-android-ranlib"
133 STRIP="aarch64-linux-android-strip"
134
135 CFLAGS="-funwind-tables -fexceptions"
136 CXXFLAGS="-funwind-tables -fexceptions -frtti"
137 ```
138
139 ### OpenSSL and Expat
140
141 The fifth step builds OpenSSL and Expat. OpenSSL and Expat are built for Android using the scripts `contrib/android/install_openssl.sh` and `contrib/android/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$ANDROID_PREFIX"` so the headers are placed in `$ANDROID_PREFIX/include` directory, and the libraries are placed in the `$ANDROID_PREFIX/lib` directory.
142
143 `ANDROID_PREFIX` is the value `$HOME/android$ANDROID_API-$ANDROID_CPU`. The libraries will be installed in `$HOME/android23-armv7a`, `$HOME/android23-aarch64`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported. `PKG_CONFIG_PATH` is the userland equivalent to sysroot, and allows Autotools to find non-system headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/android23-armv7a/lib/pkgconfig` and `$HOME/android23-aarch64/lib/pkgconfig`.
144
145 OpenSSL also uses a custom configuration file called `15-android.conf`. It is a copy of the OpenSSL's project file and located at `contrib/android/15-android.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The Unbound version has legacy NDK support removed and some other fixes, like `ANDROID_NDK_ROOT` awareness. The changes mean Unbound's `15-android.conf` will only work with Unbound, with NDK-r19 and above, and a properly set environment.
146
147 OpenSSL is configured with `no-engine`. If you want to include OpenSSL engines then edit `contrib/android/install_openssl.sh` and remove the config option.
148
149 ### Android build
150
151 Finally, once OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The recipe looks as follows.
152
153 ```
154 elif [ "$TEST_ANDROID" = "yes" ]; then
155 export AUTOTOOLS_BUILD="$(./config.guess)"
156 export PKG_CONFIG_PATH="$ANDROID_PREFIX/lib/pkgconfig"
157 ./contrib/android/install_ndk.sh
158 source ./contrib/android/setenv_android.sh
159 ./contrib/android/install_openssl.sh
160 ./contrib/android/install_expat.sh
161 ./configure \
162 --build="$AUTOTOOLS_BUILD" \
163 --host="$AUTOTOOLS_HOST" \
164 --prefix="$ANDROID_PREFIX" \
165 --with-ssl="$ANDROID_PREFIX" \
166 --with-libexpat="$ANDROID_PREFIX" \
167 --disable-gost;
168 make -j 2
169 make install
170 ```
171
172 Travis only smoke tests an Android build using a compile, link and install. The self tests are not run. TODO: figure out how to fire up an emulator, push the tests to the device and run them.
173
174 ### Android flags
175
176 `contrib/android/setenv_android.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. They are taken from `ndk-build`, so we consider them the official flag set. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags.
177
178 `CXXFLAGS` includes `-fexceptions` and `-frtti` because exceptions and runtime type info are disabled by default. `CFLAGS` include `-funwind-tables` and `-fexceptions` to ensure C++ exceptions pass through C code, if needed. Also see `docs/CPLUSPLUS-SUPPORT.html` in the NDK docs.
179
180 To inspect the flags used by `ndk-build` for a platform clone ASOP's [ndk-samples](https://github.com/android/ndk-samples/tree/master/hello-jni) and build the `hello-jni` project. Use the `V=1` flag to see the full compiler output from `ndk-build`.
181
182 ## iOS builds
183
184 Travis tests iOS builds for the armv7a, armv7s and aarch64 architectures for iPhoneOS, AppleTVOS and WatchOS. iPhoneOS is tested using both 32-bit builds (iPhones) and 64-bit builds (iPads). Travis also tests compiles against the simulators. The builds are trickier than other builds for several reasons. The testing requires a cross-compile, and requires OpenSSL and Expat prerequisites. The iOS cross-compiles also require care to set the Autotools triplet, the OpenSSL triplet, the toolchain path, the tool variables, and the sysroot. The discussion below detail the steps of the iOS recipes.
185
186 ### iOS job
187
188 The first step sets environmental variables for the cross-compile using the Travis job. A typical job with variables is shown below.
189
190 ```
191 - os: osx
192 osx_image: xcode10
193 name: Apple iPhone on iOS, armv7
194 compiler: clang
195 env:
196 - TEST_IOS=yes
197 - AUTOTOOLS_HOST=armv7-apple-ios
198 - OPENSSL_HOST=ios-cross
199 - IOS_SDK=iPhoneOS
200 - IOS_CPU=armv7s
201 - IOS_PREFIX="$HOME/$IOS_SDK-$IOS_CPU"
202 ```
203
204 ### Tool installation
205
206 The second step installs tools needed for OpenSSL, Expat and Unbound. This step is handled in by the script `contrib/ios/install_tools.sh`. The tools include autotools, curl and perl. The installation happens at the `before_script:` stage of Travis.
207
208 ```
209 before_script:
210 - |
211 if [ "$TEST_ANDROID" = "yes" ]; then
212 ./contrib/android/install_tools.sh
213 elif [ "$TEST_IOS" = "yes" ]; then
214 ./contrib/ios/install_tools.sh
215 fi
216 ```
217
218 ### iOS environment
219
220 The third step sets the iOS cross-compile environment using the script `contrib/ios/setenv_ios.sh`. The script is `sourced` so the variables in the script are available to the calling shell. The script sets variables like `CC`, `CXX`, `AS` and `AR`; sets `CFLAGS` and `CXXFLAGS`; sets a `sysroot` so iOS headers and libraries are found; and adds the path to the toolchain to `PATH`.
221
222 `contrib/ios/setenv_ios.sh` knows which toolchain and architecture to select by inspecting environmental variables set by Travis for the job. In particular, the variables `IOS_SDK` and `IOS_CPU` tell `contrib/ios/setenv_ios.sh` which tools and libraries to select.
223
224 The `contrib/ios/setenv_ios.sh` script specifies the tools to use during the cross-compile. For Apple SDKs, the tool names are the same as a desktop. There are no special prefixes for the mobile tools.
225
226 ```
227 CPP=cpp
228 CC=clang
229 CXX=clang++
230 LD=ld
231 AS=as
232 AR=ar
233 RANLIB=ranlib
234 STRIP=strip
235 ```
236
237 If you are working from a developer machine you probably already have the necessary tools installed.
238
239 ### OpenSSL and Expat
240
241 The fourth step builds OpenSSL and Expat. OpenSSL and Expat are built for iOS using the scripts `contrib/ios/install_openssl.sh` and `contrib/ios/install_expat.sh`. The scripts download, configure and install the latest release version of the libraries. The libraries are configured with `--prefix="$IOS_PREFIX"` so the headers are placed in `$IOS_PREFIX/include` directory, and the libraries are placed in the `$IOS_PREFIX/lib` directory.
242
243 `IOS_PREFIX` is the value `$HOME/$IOS_SDK-$IOS_CPU`. The scheme handles both iOS SDKs and cpu architectures so the pair recieves a unique installation directory. The libraries will be installed in `$HOME/iPhoneOS-armv7s`, `$HOME/iPhoneOS-arm64`, `$HOME/iPhoneSimulator-i386`, etc. For Autotools projects, the appropriate `PKG_CONFIG_PATH` is exported.
244
245 `PKG_CONFIG_PATH` is an important variable. It is the userland equivalent to sysroot, and allows Autotools to find non-system headers and libraries for an architecture. Typical `PKG_CONFIG_PATH` are `$HOME/iPhoneOS-armv7s/lib/pkgconfig` and `$HOME/iPhoneOS-arm64/lib/pkgconfig`.
246
247 OpenSSL also uses a custom configuration file called `15-ios.conf`. It is a copy of the OpenSSL's project file and located at `contrib/ios/15-ios.conf`. The Unbound version is copied to the OpenSSL source files after unpacking the OpenSSL distribution. The changes mean Unbound's `15-ios.conf` will only work with Unbound and a properly set environment.
248
249 OpenSSL is configured with `no-engine`. Engines require dynamic loading so engines are disabled permanently in `15-ios.conf`.
250
251 ### iOS build
252
253 Finally, once OpenSSL and Expat are built, then the Travis script configures and builds Unbound. The full recipe looks as follows.
254
255 ```
256 elif [ "$TEST_IOS" = "yes" ]; then
257 export AUTOTOOLS_BUILD="$(./config.guess)"
258 export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig"
259 source ./contrib/ios/setenv_ios.sh
260 ./contrib/ios/install_openssl.sh
261 ./contrib/ios/install_expat.sh
262 ./configure \
263 --build="$AUTOTOOLS_BUILD" \
264 --host="$AUTOTOOLS_HOST" \
265 --prefix="$IOS_PREFIX" \
266 --with-ssl="$IOS_PREFIX" \
267 --with-libexpat="$IOS_PREFIX" \
268 --disable-gost;
269 make -j 2
270 make install
271 ```
272
273 Travis only smoke tests an iOS build using a compile, link and install. The self tests are not run. TODO: figure out how to fire up an simulator, push the tests to the device and run them.
274
275 ### iOS flags
276
277 `contrib/ios/setenv_ios.sh` uses specific flags for `CFLAGS` and `CXXFLAGS`. They are taken from Xcode, so we consider them the official flag set. It is important to use the same flags across projects to avoid subtle problems due to mixing and matching different flags.
5757 AC_MSG_RESULT([$PYTHON_LDFLAGS])
5858 AC_SUBST([PYTHON_LDFLAGS])
5959
60 if test -z "$PYTHON_LIBDIR"; then
61 PYTHON_LIBDIR=`$PYTHON -c "from distutils.sysconfig import *; \
62 print(get_config_var('LIBDIR'));"`
63 fi
64
6065 #
6166 # Check for site packages
6267 #
159159
160160 static void
161161 testframe_store(struct module_env* env, struct cachedb_env* cachedb_env,
162 char* key, uint8_t* data, size_t data_len)
162 char* key, uint8_t* data, size_t data_len, time_t ATTR_UNUSED(ttl))
163163 {
164164 struct testframe_moddata* d = (struct testframe_moddata*)
165165 cachedb_env->backend_data;
605605 /* call backend */
606606 (*ie->backend->store)(qstate->env, ie, key,
607607 sldns_buffer_begin(qstate->env->scratch_buffer),
608 sldns_buffer_limit(qstate->env->scratch_buffer));
608 sldns_buffer_limit(qstate->env->scratch_buffer),
609 qstate->return_msg->rep->ttl);
609610 }
610611
611612 /**
8383
8484 /** Store (env, cachedb_env, key, data, data_len) */
8585 void (*store)(struct module_env*, struct cachedb_env*, char*,
86 uint8_t*, size_t);
86 uint8_t*, size_t, time_t);
8787 };
8888
8989 #define CACHEDB_HASHSIZE 256 /* bit hash */
5858 struct timeval timeout; /* timeout for connection setup and commands */
5959 };
6060
61 static redisReply* redis_command(struct module_env*, struct cachedb_env*,
62 const char*, const uint8_t*, size_t);
63
6164 static redisContext*
6265 redis_connect(const struct redis_moddata* moddata)
6366 {
113116 for(i = 0; i < moddata->numctxs; i++)
114117 moddata->ctxs[i] = redis_connect(moddata);
115118 cachedb_env->backend_data = moddata;
119 if(env->cfg->redis_expire_records) {
120 redisReply* rep = NULL;
121 int redis_reply_type = 0;
122 /** check if setex command is supported */
123 rep = redis_command(env, cachedb_env,
124 "SETEX __UNBOUND_REDIS_CHECK__ 1 none", NULL, 0);
125 if(!rep) {
126 /** init failed, no response from redis server*/
127 log_err("redis_init: failed to init redis, the "
128 "redis-expire-records option requires the SETEX command "
129 "(redis >= 2.0.0)");
130 return 0;
131 }
132 redis_reply_type = rep->type;
133 freeReplyObject(rep);
134 switch(redis_reply_type) {
135 case REDIS_REPLY_STATUS:
136 break;
137 default:
138 /** init failed, setex command not supported */
139 log_err("redis_init: failed to init redis, the "
140 "redis-expire-records option requires the SETEX command "
141 "(redis >= 2.0.0)");
142 return 0;
143 }
144 }
145
116146 return 1;
117147 }
118148
218248 rep = redis_command(env, cachedb_env, cmdbuf, NULL, 0);
219249 if(!rep)
220250 return 0;
221 switch (rep->type) {
251 switch(rep->type) {
222252 case REDIS_REPLY_NIL:
223253 verbose(VERB_ALGO, "redis_lookup: no data cached");
224254 break;
248278
249279 static void
250280 redis_store(struct module_env* env, struct cachedb_env* cachedb_env,
251 char* key, uint8_t* data, size_t data_len)
281 char* key, uint8_t* data, size_t data_len, time_t ttl)
252282 {
253283 redisReply* rep;
254 char cmdbuf[4+(CACHEDB_HASHSIZE/8)*2+3+1]; /* "SET " + key + " %b" */
255284 int n;
256
257 verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len);
258
259 /* build command to set to a binary safe string */
260 n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b", key);
285 int set_ttl = (env->cfg->redis_expire_records &&
286 (!env->cfg->serve_expired || env->cfg->serve_expired_ttl > 0));
287 /* Supported commands:
288 * - "SET " + key + " %b"
289 * - "SETEX " + key + " " + ttl + " %b"
290 */
291 char cmdbuf[6+(CACHEDB_HASHSIZE/8)*2+11+3+1];
292
293 if (!set_ttl) {
294 verbose(VERB_ALGO, "redis_store %s (%d bytes)", key, (int)data_len);
295 /* build command to set to a binary safe string */
296 n = snprintf(cmdbuf, sizeof(cmdbuf), "SET %s %%b", key);
297 } else {
298 /* add expired ttl time to redis ttl to avoid premature eviction of key */
299 ttl += env->cfg->serve_expired_ttl;
300 verbose(VERB_ALGO, "redis_store %s (%d bytes) with ttl %u",
301 key, (int)data_len, (uint32_t)ttl);
302 /* build command to set to a binary safe string */
303 n = snprintf(cmdbuf, sizeof(cmdbuf), "SETEX %s %u %%b", key,
304 (uint32_t)ttl);
305 }
306
307
261308 if(n < 0 || n >= (int)sizeof(cmdbuf)) {
262309 log_err("redis_store: unexpected failure to build command");
263310 return;
0 #!/usr/bin/sh
0 #! /bin/sh
11 # Attempt to guess a canonical system name.
2 # Copyright 1992-2016 Free Software Foundation, Inc.
3
4 timestamp='2016-10-02'
2 # Copyright 1992-2020 Free Software Foundation, Inc.
3
4 timestamp='2020-07-12'
55
66 # This file is free software; you can redistribute it and/or modify it
77 # under the terms of the GNU General Public License as published by
1414 # General Public License for more details.
1515 #
1616 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, see <http://www.gnu.org/licenses/>.
17 # along with this program; if not, see <https://www.gnu.org/licenses/>.
1818 #
1919 # As a special exception to the GNU General Public License, if you
2020 # distribute this file as part of a program that contains a
2626 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
2727 #
2828 # You can get the latest version of this script from:
29 # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
29 # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
3030 #
3131 # Please send patches to <config-patches@gnu.org>.
3232
3838
3939 Output the configuration name of the system \`$me' is run on.
4040
41 Operation modes:
41 Options:
4242 -h, --help print this help, then exit
4343 -t, --time-stamp print date of last modification, then exit
4444 -v, --version print version number, then exit
4949 GNU config.guess ($timestamp)
5050
5151 Originally written by Per Bothner.
52 Copyright 1992-2016 Free Software Foundation, Inc.
52 Copyright 1992-2020 Free Software Foundation, Inc.
5353
5454 This is free software; see the source for copying conditions. There is NO
5555 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
8383 exit 1
8484 fi
8585
86 trap 'exit 1' 1 2 15
87
8886 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
8987 # compiler to aid in system detection is discouraged as it requires
9088 # temporary files to be created and, as you can see below, it is a
9593
9694 # Portable tmp directory creation inspired by the Autoconf team.
9795
98 set_cc_for_build='
99 trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
100 trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
101 : ${TMPDIR=/tmp} ;
102 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
103 { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
104 { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
105 { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
106 dummy=$tmp/dummy ;
107 tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
108 case $CC_FOR_BUILD,$HOST_CC,$CC in
109 ,,) echo "int x;" > $dummy.c ;
110 for c in cc gcc c89 c99 ; do
111 if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
112 CC_FOR_BUILD="$c"; break ;
113 fi ;
114 done ;
115 if test x"$CC_FOR_BUILD" = x ; then
116 CC_FOR_BUILD=no_compiler_found ;
117 fi
118 ;;
119 ,,*) CC_FOR_BUILD=$CC ;;
120 ,*,*) CC_FOR_BUILD=$HOST_CC ;;
121 esac ; set_cc_for_build= ;'
96 tmp=
97 # shellcheck disable=SC2172
98 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
99
100 set_cc_for_build() {
101 # prevent multiple calls if $tmp is already set
102 test "$tmp" && return 0
103 : "${TMPDIR=/tmp}"
104 # shellcheck disable=SC2039
105 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
106 { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
107 { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
108 { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
109 dummy=$tmp/dummy
110 case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
111 ,,) echo "int x;" > "$dummy.c"
112 for driver in cc gcc c89 c99 ; do
113 if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
114 CC_FOR_BUILD="$driver"
115 break
116 fi
117 done
118 if test x"$CC_FOR_BUILD" = x ; then
119 CC_FOR_BUILD=no_compiler_found
120 fi
121 ;;
122 ,,*) CC_FOR_BUILD=$CC ;;
123 ,*,*) CC_FOR_BUILD=$HOST_CC ;;
124 esac
125 }
122126
123127 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
124128 # (ghazi@noc.rutgers.edu 1994-08-24)
125 if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
129 if test -f /.attbin/uname ; then
126130 PATH=$PATH:/.attbin ; export PATH
127131 fi
128132
131135 UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
132136 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
133137
134 case "${UNAME_SYSTEM}" in
138 case "$UNAME_SYSTEM" in
135139 Linux|GNU|GNU/*)
136140 # If the system lacks a compiler, then just pick glibc.
137141 # We could probably try harder.
138142 LIBC=gnu
139143
140 eval $set_cc_for_build
141 cat <<-EOF > $dummy.c
144 set_cc_for_build
145 cat <<-EOF > "$dummy.c"
142146 #include <features.h>
143147 #if defined(__UCLIBC__)
144148 LIBC=uclibc
148152 LIBC=gnu
149153 #endif
150154 EOF
151 eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
155 eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
156
157 # If ldd exists, use it to detect musl libc.
158 if command -v ldd >/dev/null && \
159 ldd --version 2>&1 | grep -q ^musl
160 then
161 LIBC=musl
162 fi
152163 ;;
153164 esac
154165
155166 # Note: order is significant - the case branches are not exclusive.
156167
157 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
168 case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
158169 *:NetBSD:*:*)
159170 # NetBSD (nbsd) targets should (where applicable) match one or
160171 # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
168179 # portion of the name. We always set it to "unknown".
169180 sysctl="sysctl -n hw.machine_arch"
170181 UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
171 /sbin/$sysctl 2>/dev/null || \
172 /usr/sbin/$sysctl 2>/dev/null || \
182 "/sbin/$sysctl" 2>/dev/null || \
183 "/usr/sbin/$sysctl" 2>/dev/null || \
173184 echo unknown)`
174 case "${UNAME_MACHINE_ARCH}" in
185 case "$UNAME_MACHINE_ARCH" in
175186 armeb) machine=armeb-unknown ;;
176187 arm*) machine=arm-unknown ;;
177188 sh3el) machine=shl-unknown ;;
178189 sh3eb) machine=sh-unknown ;;
179190 sh5el) machine=sh5le-unknown ;;
180191 earmv*)
181 arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
182 endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
183 machine=${arch}${endian}-unknown
192 arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
193 endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
194 machine="${arch}${endian}"-unknown
184195 ;;
185 *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
196 *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
186197 esac
187198 # The Operating System including object format, if it has switched
188199 # to ELF recently (or will in the future) and ABI.
189 case "${UNAME_MACHINE_ARCH}" in
200 case "$UNAME_MACHINE_ARCH" in
190201 earm*)
191202 os=netbsdelf
192203 ;;
193204 arm*|i386|m68k|ns32k|sh3*|sparc|vax)
194 eval $set_cc_for_build
205 set_cc_for_build
195206 if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
196207 | grep -q __ELF__
197208 then
207218 ;;
208219 esac
209220 # Determine ABI tags.
210 case "${UNAME_MACHINE_ARCH}" in
221 case "$UNAME_MACHINE_ARCH" in
211222 earm*)
212223 expr='s/^earmv[0-9]/-eabi/;s/eb$//'
213 abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
224 abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
214225 ;;
215226 esac
216227 # The OS release
218229 # thus, need a distinct triplet. However, they do not need
219230 # kernel version information, so it can be replaced with a
220231 # suitable tag, in the style of linux-gnu.
221 case "${UNAME_VERSION}" in
232 case "$UNAME_VERSION" in
222233 Debian*)
223234 release='-gnu'
224235 ;;
225236 *)
226 release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
237 release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
227238 ;;
228239 esac
229240 # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
230241 # contains redundant information, the shorter form:
231242 # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
232 echo "${machine}-${os}${release}${abi}"
243 echo "$machine-${os}${release}${abi-}"
233244 exit ;;
234245 *:Bitrig:*:*)
235246 UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
236 echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
247 echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
237248 exit ;;
238249 *:OpenBSD:*:*)
239250 UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
240 echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
251 echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
241252 exit ;;
242253 *:LibertyBSD:*:*)
243254 UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
244 echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
255 echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
256 exit ;;
257 *:MidnightBSD:*:*)
258 echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
245259 exit ;;
246260 *:ekkoBSD:*:*)
247 echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
261 echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
248262 exit ;;
249263 *:SolidBSD:*:*)
250 echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
264 echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
265 exit ;;
266 *:OS108:*:*)
267 echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
251268 exit ;;
252269 macppc:MirBSD:*:*)
253 echo powerpc-unknown-mirbsd${UNAME_RELEASE}
270 echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
254271 exit ;;
255272 *:MirBSD:*:*)
256 echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
273 echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
257274 exit ;;
258275 *:Sortix:*:*)
259 echo ${UNAME_MACHINE}-unknown-sortix
276 echo "$UNAME_MACHINE"-unknown-sortix
277 exit ;;
278 *:Twizzler:*:*)
279 echo "$UNAME_MACHINE"-unknown-twizzler
280 exit ;;
281 *:Redox:*:*)
282 echo "$UNAME_MACHINE"-unknown-redox
283 exit ;;
284 mips:OSF1:*.*)
285 echo mips-dec-osf1
260286 exit ;;
261287 alpha:OSF1:*:*)
262288 case $UNAME_RELEASE in
309335 # A Tn.n version is a released field test version.
310336 # A Xn.n version is an unreleased experimental baselevel.
311337 # 1.2 uses "1.2" for uname -r.
312 echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
338 echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
313339 # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
314340 exitcode=$?
315341 trap '' 0
316342 exit $exitcode ;;
317 Alpha\ *:Windows_NT*:*)
318 # How do we know it's Interix rather than the generic POSIX subsystem?
319 # Should we change UNAME_MACHINE based on the output of uname instead
320 # of the specific Alpha model?
321 echo alpha-pc-interix
322 exit ;;
323 21064:Windows_NT:50:3)
324 echo alpha-dec-winnt3.5
325 exit ;;
326343 Amiga*:UNIX_System_V:4.0:*)
327344 echo m68k-unknown-sysv4
328345 exit ;;
329346 *:[Aa]miga[Oo][Ss]:*:*)
330 echo ${UNAME_MACHINE}-unknown-amigaos
347 echo "$UNAME_MACHINE"-unknown-amigaos
331348 exit ;;
332349 *:[Mm]orph[Oo][Ss]:*:*)
333 echo ${UNAME_MACHINE}-unknown-morphos
350 echo "$UNAME_MACHINE"-unknown-morphos
334351 exit ;;
335352 *:OS/390:*:*)
336353 echo i370-ibm-openedition
342359 echo powerpc-ibm-os400
343360 exit ;;
344361 arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
345 echo arm-acorn-riscix${UNAME_RELEASE}
362 echo arm-acorn-riscix"$UNAME_RELEASE"
346363 exit ;;
347364 arm*:riscos:*:*|arm*:RISCOS:*:*)
348365 echo arm-unknown-riscos
369386 sparc) echo sparc-icl-nx7; exit ;;
370387 esac ;;
371388 s390x:SunOS:*:*)
372 echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
389 echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
373390 exit ;;
374391 sun4H:SunOS:5.*:*)
375 echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
392 echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
376393 exit ;;
377394 sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
378 echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
395 echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
379396 exit ;;
380397 i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
381 echo i386-pc-auroraux${UNAME_RELEASE}
398 echo i386-pc-auroraux"$UNAME_RELEASE"
382399 exit ;;
383400 i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
384 eval $set_cc_for_build
401 set_cc_for_build
385402 SUN_ARCH=i386
386403 # If there is a compiler, see if it is configured for 64-bit objects.
387404 # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
394411 SUN_ARCH=x86_64
395412 fi
396413 fi
397 echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
414 echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
398415 exit ;;
399416 sun4*:SunOS:6*:*)
400417 # According to config.sub, this is the proper way to canonicalize
401418 # SunOS6. Hard to guess exactly what SunOS6 will be like, but
402419 # it's likely to be more like Solaris than SunOS4.
403 echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
420 echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
404421 exit ;;
405422 sun4*:SunOS:*:*)
406423 case "`/usr/bin/arch -k`" in
409426 ;;
410427 esac
411428 # Japanese Language versions have a version number like `4.1.3-JL'.
412 echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
429 echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
413430 exit ;;
414431 sun3*:SunOS:*:*)
415 echo m68k-sun-sunos${UNAME_RELEASE}
432 echo m68k-sun-sunos"$UNAME_RELEASE"
416433 exit ;;
417434 sun*:*:4.2BSD:*)
418435 UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
419 test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
436 test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
420437 case "`/bin/arch`" in
421438 sun3)
422 echo m68k-sun-sunos${UNAME_RELEASE}
439 echo m68k-sun-sunos"$UNAME_RELEASE"
423440 ;;
424441 sun4)
425 echo sparc-sun-sunos${UNAME_RELEASE}
442 echo sparc-sun-sunos"$UNAME_RELEASE"
426443 ;;
427444 esac
428445 exit ;;
429446 aushp:SunOS:*:*)
430 echo sparc-auspex-sunos${UNAME_RELEASE}
447 echo sparc-auspex-sunos"$UNAME_RELEASE"
431448 exit ;;
432449 # The situation for MiNT is a little confusing. The machine name
433450 # can be virtually everything (everything which is not
438455 # MiNT. But MiNT is downward compatible to TOS, so this should
439456 # be no problem.
440457 atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
441 echo m68k-atari-mint${UNAME_RELEASE}
458 echo m68k-atari-mint"$UNAME_RELEASE"
442459 exit ;;
443460 atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
444 echo m68k-atari-mint${UNAME_RELEASE}
461 echo m68k-atari-mint"$UNAME_RELEASE"
445462 exit ;;
446463 *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
447 echo m68k-atari-mint${UNAME_RELEASE}
464 echo m68k-atari-mint"$UNAME_RELEASE"
448465 exit ;;
449466 milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
450 echo m68k-milan-mint${UNAME_RELEASE}
467 echo m68k-milan-mint"$UNAME_RELEASE"
451468 exit ;;
452469 hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
453 echo m68k-hades-mint${UNAME_RELEASE}
470 echo m68k-hades-mint"$UNAME_RELEASE"
454471 exit ;;
455472 *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
456 echo m68k-unknown-mint${UNAME_RELEASE}
473 echo m68k-unknown-mint"$UNAME_RELEASE"
457474 exit ;;
458475 m68k:machten:*:*)
459 echo m68k-apple-machten${UNAME_RELEASE}
476 echo m68k-apple-machten"$UNAME_RELEASE"
460477 exit ;;
461478 powerpc:machten:*:*)
462 echo powerpc-apple-machten${UNAME_RELEASE}
479 echo powerpc-apple-machten"$UNAME_RELEASE"
463480 exit ;;
464481 RISC*:Mach:*:*)
465482 echo mips-dec-mach_bsd4.3
466483 exit ;;
467484 RISC*:ULTRIX:*:*)
468 echo mips-dec-ultrix${UNAME_RELEASE}
485 echo mips-dec-ultrix"$UNAME_RELEASE"
469486 exit ;;
470487 VAX*:ULTRIX*:*:*)
471 echo vax-dec-ultrix${UNAME_RELEASE}
488 echo vax-dec-ultrix"$UNAME_RELEASE"
472489 exit ;;
473490 2020:CLIX:*:* | 2430:CLIX:*:*)
474 echo clipper-intergraph-clix${UNAME_RELEASE}
491 echo clipper-intergraph-clix"$UNAME_RELEASE"
475492 exit ;;
476493 mips:*:*:UMIPS | mips:*:*:RISCos)
477 eval $set_cc_for_build
478 sed 's/^ //' << EOF >$dummy.c
494 set_cc_for_build
495 sed 's/^ //' << EOF > "$dummy.c"
479496 #ifdef __cplusplus
480497 #include <stdio.h> /* for printf() prototype */
481498 int main (int argc, char *argv[]) {
484501 #endif
485502 #if defined (host_mips) && defined (MIPSEB)
486503 #if defined (SYSTYPE_SYSV)
487 printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
504 printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
488505 #endif
489506 #if defined (SYSTYPE_SVR4)
490 printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
507 printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
491508 #endif
492509 #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
493 printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
510 printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
494511 #endif
495512 #endif
496513 exit (-1);
497514 }
498515 EOF
499 $CC_FOR_BUILD -o $dummy $dummy.c &&
500 dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
501 SYSTEM_NAME=`$dummy $dummyarg` &&
516 $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
517 dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
518 SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
502519 { echo "$SYSTEM_NAME"; exit; }
503 echo mips-mips-riscos${UNAME_RELEASE}
520 echo mips-mips-riscos"$UNAME_RELEASE"
504521 exit ;;
505522 Motorola:PowerMAX_OS:*:*)
506523 echo powerpc-motorola-powermax
526543 AViiON:dgux:*:*)
527544 # DG/UX returns AViiON for all architectures
528545 UNAME_PROCESSOR=`/usr/bin/uname -p`
529 if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
546 if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
530547 then
531 if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
532 [ ${TARGET_BINARY_INTERFACE}x = x ]
548 if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
549 [ "$TARGET_BINARY_INTERFACE"x = x ]
533550 then
534 echo m88k-dg-dgux${UNAME_RELEASE}
551 echo m88k-dg-dgux"$UNAME_RELEASE"
535552 else
536 echo m88k-dg-dguxbcs${UNAME_RELEASE}
553 echo m88k-dg-dguxbcs"$UNAME_RELEASE"
537554 fi
538555 else
539 echo i586-dg-dgux${UNAME_RELEASE}
556 echo i586-dg-dgux"$UNAME_RELEASE"
540557 fi
541558 exit ;;
542559 M88*:DolphinOS:*:*) # DolphinOS (SVR3)
553570 echo m68k-tektronix-bsd
554571 exit ;;
555572 *:IRIX*:*:*)
556 echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
573 echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
557574 exit ;;
558575 ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
559576 echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
565582 if [ -x /usr/bin/oslevel ] ; then
566583 IBM_REV=`/usr/bin/oslevel`
567584 else
568 IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
569 fi
570 echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
585 IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
586 fi
587 echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
571588 exit ;;
572589 *:AIX:2:3)
573590 if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
574 eval $set_cc_for_build
575 sed 's/^ //' << EOF >$dummy.c
591 set_cc_for_build
592 sed 's/^ //' << EOF > "$dummy.c"
576593 #include <sys/systemcfg.h>
577594
578595 main()
583600 exit(0);
584601 }
585602 EOF
586 if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
603 if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
587604 then
588605 echo "$SYSTEM_NAME"
589606 else
597614 exit ;;
598615 *:AIX:*:[4567])
599616 IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
600 if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
617 if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
601618 IBM_ARCH=rs6000
602619 else
603620 IBM_ARCH=powerpc
606623 IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
607624 awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
608625 else
609 IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
610 fi
611 echo ${IBM_ARCH}-ibm-aix${IBM_REV}
626 IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
627 fi
628 echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
612629 exit ;;
613630 *:AIX:*:*)
614631 echo rs6000-ibm-aix
615632 exit ;;
616 ibmrt:4.4BSD:*|romp-ibm:BSD:*)
633 ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
617634 echo romp-ibm-bsd4.4
618635 exit ;;
619636 ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
620 echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
637 echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to
621638 exit ;; # report: romp-ibm BSD 4.3
622639 *:BOSX:*:*)
623640 echo rs6000-bull-bosx
632649 echo m68k-hp-bsd4.4
633650 exit ;;
634651 9000/[34678]??:HP-UX:*:*)
635 HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
636 case "${UNAME_MACHINE}" in
637 9000/31? ) HP_ARCH=m68000 ;;
638 9000/[34]?? ) HP_ARCH=m68k ;;
652 HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
653 case "$UNAME_MACHINE" in
654 9000/31?) HP_ARCH=m68000 ;;
655 9000/[34]??) HP_ARCH=m68k ;;
639656 9000/[678][0-9][0-9])
640657 if [ -x /usr/bin/getconf ]; then
641658 sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
642659 sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
643 case "${sc_cpu_version}" in
660 case "$sc_cpu_version" in
644661 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
645662 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
646663 532) # CPU_PA_RISC2_0
647 case "${sc_kernel_bits}" in
664 case "$sc_kernel_bits" in
648665 32) HP_ARCH=hppa2.0n ;;
649666 64) HP_ARCH=hppa2.0w ;;
650667 '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
651668 esac ;;
652669 esac
653670 fi
654 if [ "${HP_ARCH}" = "" ]; then
655 eval $set_cc_for_build
656 sed 's/^ //' << EOF >$dummy.c
671 if [ "$HP_ARCH" = "" ]; then
672 set_cc_for_build
673 sed 's/^ //' << EOF > "$dummy.c"
657674
658675 #define _HPUX_SOURCE
659676 #include <stdlib.h>
686703 exit (0);
687704 }
688705 EOF
689 (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
706 (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
690707 test -z "$HP_ARCH" && HP_ARCH=hppa
691708 fi ;;
692709 esac
693 if [ ${HP_ARCH} = hppa2.0w ]
710 if [ "$HP_ARCH" = hppa2.0w ]
694711 then
695 eval $set_cc_for_build
712 set_cc_for_build
696713
697714 # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
698715 # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
711728 HP_ARCH=hppa64
712729 fi
713730 fi
714 echo ${HP_ARCH}-hp-hpux${HPUX_REV}
731 echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
715732 exit ;;
716733 ia64:HP-UX:*:*)
717 HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
718 echo ia64-hp-hpux${HPUX_REV}
734 HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
735 echo ia64-hp-hpux"$HPUX_REV"
719736 exit ;;
720737 3050*:HI-UX:*:*)
721 eval $set_cc_for_build
722 sed 's/^ //' << EOF >$dummy.c
738 set_cc_for_build
739 sed 's/^ //' << EOF > "$dummy.c"
723740 #include <unistd.h>
724741 int
725742 main ()
744761 exit (0);
745762 }
746763 EOF
747 $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
764 $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
748765 { echo "$SYSTEM_NAME"; exit; }
749766 echo unknown-hitachi-hiuxwe2
750767 exit ;;
751 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
768 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
752769 echo hppa1.1-hp-bsd
753770 exit ;;
754771 9000/8??:4.3bsd:*:*)
757774 *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
758775 echo hppa1.0-hp-mpeix
759776 exit ;;
760 hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
777 hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
761778 echo hppa1.1-hp-osf
762779 exit ;;
763780 hp8??:OSF1:*:*)
765782 exit ;;
766783 i*86:OSF1:*:*)
767784 if [ -x /usr/sbin/sysversion ] ; then
768 echo ${UNAME_MACHINE}-unknown-osf1mk
785 echo "$UNAME_MACHINE"-unknown-osf1mk
769786 else
770 echo ${UNAME_MACHINE}-unknown-osf1
787 echo "$UNAME_MACHINE"-unknown-osf1
771788 fi
772789 exit ;;
773790 parisc*:Lites*:*:*)
792809 echo c4-convex-bsd
793810 exit ;;
794811 CRAY*Y-MP:*:*:*)
795 echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
812 echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
796813 exit ;;
797814 CRAY*[A-Z]90:*:*:*)
798 echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
815 echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
799816 | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
800817 -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
801818 -e 's/\.[^.]*$/.X/'
802819 exit ;;
803820 CRAY*TS:*:*:*)
804 echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
821 echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
805822 exit ;;
806823 CRAY*T3E:*:*:*)
807 echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
824 echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
808825 exit ;;
809826 CRAY*SV1:*:*:*)
810 echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
827 echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
811828 exit ;;
812829 *:UNICOS/mp:*:*)
813 echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
830 echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
814831 exit ;;
815832 F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
816833 FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
817834 FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
818 FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
835 FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
819836 echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
820837 exit ;;
821838 5000:UNIX_System_V:4.*:*)
822839 FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
823 FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
840 FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
824841 echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
825842 exit ;;
826843 i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
827 echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
844 echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
828845 exit ;;
829846 sparc*:BSD/OS:*:*)
830 echo sparc-unknown-bsdi${UNAME_RELEASE}
847 echo sparc-unknown-bsdi"$UNAME_RELEASE"
831848 exit ;;
832849 *:BSD/OS:*:*)
833 echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
850 echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
851 exit ;;
852 arm:FreeBSD:*:*)
853 UNAME_PROCESSOR=`uname -p`
854 set_cc_for_build
855 if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
856 | grep -q __ARM_PCS_VFP
857 then
858 echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
859 else
860 echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
861 fi
834862 exit ;;
835863 *:FreeBSD:*:*)
836864 UNAME_PROCESSOR=`/usr/bin/uname -p`
837 case ${UNAME_PROCESSOR} in
865 case "$UNAME_PROCESSOR" in
838866 amd64)
839 echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
840 *)
841 echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
867 UNAME_PROCESSOR=x86_64 ;;
868 i386)
869 UNAME_PROCESSOR=i586 ;;
842870 esac
871 echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
843872 exit ;;
844873 i*:CYGWIN*:*)
845 echo ${UNAME_MACHINE}-pc-cygwin
874 echo "$UNAME_MACHINE"-pc-cygwin
846875 exit ;;
847876 *:MINGW64*:*)
848 echo ${UNAME_MACHINE}-pc-mingw64
877 echo "$UNAME_MACHINE"-pc-mingw64
849878 exit ;;
850879 *:MINGW*:*)
851 echo ${UNAME_MACHINE}-pc-mingw32
880 echo "$UNAME_MACHINE"-pc-mingw32
852881 exit ;;
853882 *:MSYS*:*)
854 echo ${UNAME_MACHINE}-pc-msys
855 exit ;;
856 i*:windows32*:*)
857 # uname -m includes "-pc" on this system.
858 echo ${UNAME_MACHINE}-mingw32
883 echo "$UNAME_MACHINE"-pc-msys
859884 exit ;;
860885 i*:PW*:*)
861 echo ${UNAME_MACHINE}-pc-pw32
886 echo "$UNAME_MACHINE"-pc-pw32
862887 exit ;;
863888 *:Interix*:*)
864 case ${UNAME_MACHINE} in
889 case "$UNAME_MACHINE" in
865890 x86)
866 echo i586-pc-interix${UNAME_RELEASE}
891 echo i586-pc-interix"$UNAME_RELEASE"
867892 exit ;;
868893 authenticamd | genuineintel | EM64T)
869 echo x86_64-unknown-interix${UNAME_RELEASE}
894 echo x86_64-unknown-interix"$UNAME_RELEASE"
870895 exit ;;
871896 IA64)
872 echo ia64-unknown-interix${UNAME_RELEASE}
897 echo ia64-unknown-interix"$UNAME_RELEASE"
873898 exit ;;
874899 esac ;;
875 [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
876 echo i${UNAME_MACHINE}-pc-mks
877 exit ;;
878 8664:Windows_NT:*)
879 echo x86_64-pc-mks
880 exit ;;
881 i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
882 # How do we know it's Interix rather than the generic POSIX subsystem?
883 # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
884 # UNAME_MACHINE based on the output of uname instead of i386?
885 echo i586-pc-interix
886 exit ;;
887900 i*:UWIN*:*)
888 echo ${UNAME_MACHINE}-pc-uwin
901 echo "$UNAME_MACHINE"-pc-uwin
889902 exit ;;
890903 amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
891 echo x86_64-unknown-cygwin
892 exit ;;
893 p*:CYGWIN*:*)
894 echo powerpcle-unknown-cygwin
904 echo x86_64-pc-cygwin
895905 exit ;;
896906 prep*:SunOS:5.*:*)
897 echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
907 echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
898908 exit ;;
899909 *:GNU:*:*)
900910 # the GNU system
901 echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
911 echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
902912 exit ;;
903913 *:GNU/*:*:*)
904914 # other systems with GNU libc and userland
905 echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
906 exit ;;
907 i*86:Minix:*:*)
908 echo ${UNAME_MACHINE}-pc-minix
915 echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
916 exit ;;
917 *:Minix:*:*)
918 echo "$UNAME_MACHINE"-unknown-minix
909919 exit ;;
910920 aarch64:Linux:*:*)
911 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
921 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
912922 exit ;;
913923 aarch64_be:Linux:*:*)
914924 UNAME_MACHINE=aarch64_be
915 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
925 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
916926 exit ;;
917927 alpha:Linux:*:*)
918 case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
928 case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
919929 EV5) UNAME_MACHINE=alphaev5 ;;
920930 EV56) UNAME_MACHINE=alphaev56 ;;
921931 PCA56) UNAME_MACHINE=alphapca56 ;;
926936 esac
927937 objdump --private-headers /bin/sh | grep -q ld.so.1
928938 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
929 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
939 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
930940 exit ;;
931941 arc:Linux:*:* | arceb:Linux:*:*)
932 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
942 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
933943 exit ;;
934944 arm*:Linux:*:*)
935 eval $set_cc_for_build
945 set_cc_for_build
936946 if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
937947 | grep -q __ARM_EABI__
938948 then
939 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
949 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
940950 else
941951 if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
942952 | grep -q __ARM_PCS_VFP
943953 then
944 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
954 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
945955 else
946 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
956 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
947957 fi
948958 fi
949959 exit ;;
950960 avr32*:Linux:*:*)
951 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
961 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
952962 exit ;;
953963 cris:Linux:*:*)
954 echo ${UNAME_MACHINE}-axis-linux-${LIBC}
964 echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
955965 exit ;;
956966 crisv32:Linux:*:*)
957 echo ${UNAME_MACHINE}-axis-linux-${LIBC}
967 echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
958968 exit ;;
959969 e2k:Linux:*:*)
960 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
970 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
961971 exit ;;
962972 frv:Linux:*:*)
963 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
973 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
964974 exit ;;
965975 hexagon:Linux:*:*)
966 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
976 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
967977 exit ;;
968978 i*86:Linux:*:*)
969 echo ${UNAME_MACHINE}-pc-linux-${LIBC}
979 echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
970980 exit ;;
971981 ia64:Linux:*:*)
972 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
982 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
973983 exit ;;
974984 k1om:Linux:*:*)
975 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
985 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
976986 exit ;;
977987 m32r*:Linux:*:*)
978 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
988 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
979989 exit ;;
980990 m68*:Linux:*:*)
981 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
991 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
982992 exit ;;
983993 mips:Linux:*:* | mips64:Linux:*:*)
984 eval $set_cc_for_build
985 sed 's/^ //' << EOF >$dummy.c
994 set_cc_for_build
995 IS_GLIBC=0
996 test x"${LIBC}" = xgnu && IS_GLIBC=1
997 sed 's/^ //' << EOF > "$dummy.c"
986998 #undef CPU
987 #undef ${UNAME_MACHINE}
988 #undef ${UNAME_MACHINE}el
999 #undef mips
1000 #undef mipsel
1001 #undef mips64
1002 #undef mips64el
1003 #if ${IS_GLIBC} && defined(_ABI64)
1004 LIBCABI=gnuabi64
1005 #else
1006 #if ${IS_GLIBC} && defined(_ABIN32)
1007 LIBCABI=gnuabin32
1008 #else
1009 LIBCABI=${LIBC}
1010 #endif
1011 #endif
1012
1013 #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
1014 CPU=mipsisa64r6
1015 #else
1016 #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
1017 CPU=mipsisa32r6
1018 #else
1019 #if defined(__mips64)
1020 CPU=mips64
1021 #else
1022 CPU=mips
1023 #endif
1024 #endif
1025 #endif
1026
9891027 #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
990 CPU=${UNAME_MACHINE}el
1028 MIPS_ENDIAN=el
9911029 #else
9921030 #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
993 CPU=${UNAME_MACHINE}
1031 MIPS_ENDIAN=
9941032 #else
995 CPU=
1033 MIPS_ENDIAN=
9961034 #endif
9971035 #endif
9981036 EOF
999 eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
1000 test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
1037 eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`"
1038 test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
10011039 ;;
10021040 mips64el:Linux:*:*)
1003 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
1041 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
10041042 exit ;;
10051043 openrisc*:Linux:*:*)
1006 echo or1k-unknown-linux-${LIBC}
1044 echo or1k-unknown-linux-"$LIBC"
10071045 exit ;;
10081046 or32:Linux:*:* | or1k*:Linux:*:*)
1009 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
1047 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
10101048 exit ;;
10111049 padre:Linux:*:*)
1012 echo sparc-unknown-linux-${LIBC}
1050 echo sparc-unknown-linux-"$LIBC"
10131051 exit ;;
10141052 parisc64:Linux:*:* | hppa64:Linux:*:*)
1015 echo hppa64-unknown-linux-${LIBC}
1053 echo hppa64-unknown-linux-"$LIBC"
10161054 exit ;;
10171055 parisc:Linux:*:* | hppa:Linux:*:*)
10181056 # Look for CPU level
10191057 case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
1020 PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
1021 PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
1022 *) echo hppa-unknown-linux-${LIBC} ;;
1058 PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
1059 PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
1060 *) echo hppa-unknown-linux-"$LIBC" ;;
10231061 esac
10241062 exit ;;
10251063 ppc64:Linux:*:*)
1026 echo powerpc64-unknown-linux-${LIBC}
1064 echo powerpc64-unknown-linux-"$LIBC"
10271065 exit ;;
10281066 ppc:Linux:*:*)
1029 echo powerpc-unknown-linux-${LIBC}
1067 echo powerpc-unknown-linux-"$LIBC"
10301068 exit ;;
10311069 ppc64le:Linux:*:*)
1032 echo powerpc64le-unknown-linux-${LIBC}
1070 echo powerpc64le-unknown-linux-"$LIBC"
10331071 exit ;;
10341072 ppcle:Linux:*:*)
1035 echo powerpcle-unknown-linux-${LIBC}
1073 echo powerpcle-unknown-linux-"$LIBC"
10361074 exit ;;
10371075 riscv32:Linux:*:* | riscv64:Linux:*:*)
1038 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
1076 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
10391077 exit ;;
10401078 s390:Linux:*:* | s390x:Linux:*:*)
1041 echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
1079 echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
10421080 exit ;;
10431081 sh64*:Linux:*:*)
1044 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
1082 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
10451083 exit ;;
10461084 sh*:Linux:*:*)
1047 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
1085 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
10481086 exit ;;
10491087 sparc:Linux:*:* | sparc64:Linux:*:*)
1050 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
1088 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
10511089 exit ;;
10521090 tile*:Linux:*:*)
1053 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
1091 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
10541092 exit ;;
10551093 vax:Linux:*:*)
1056 echo ${UNAME_MACHINE}-dec-linux-${LIBC}
1094 echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
10571095 exit ;;
10581096 x86_64:Linux:*:*)
1059 echo ${UNAME_MACHINE}-pc-linux-${LIBC}
1097 set_cc_for_build
1098 LIBCABI=$LIBC
1099 if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
1100 if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
1101 (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
1102 grep IS_X32 >/dev/null
1103 then
1104 LIBCABI="$LIBC"x32
1105 fi
1106 fi
1107 echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI"
10601108 exit ;;
10611109 xtensa*:Linux:*:*)
1062 echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
1110 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
10631111 exit ;;
10641112 i*86:DYNIX/ptx:4*:*)
10651113 # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
10731121 # I am not positive that other SVR4 systems won't match this,
10741122 # I just have to hope. -- rms.
10751123 # Use sysv4.2uw... so that sysv4* matches it.
1076 echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
1124 echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
10771125 exit ;;
10781126 i*86:OS/2:*:*)
10791127 # If we were able to find `uname', then EMX Unix compatibility
10801128 # is probably installed.
1081 echo ${UNAME_MACHINE}-pc-os2-emx
1129 echo "$UNAME_MACHINE"-pc-os2-emx
10821130 exit ;;
10831131 i*86:XTS-300:*:STOP)
1084 echo ${UNAME_MACHINE}-unknown-stop
1132 echo "$UNAME_MACHINE"-unknown-stop
10851133 exit ;;
10861134 i*86:atheos:*:*)
1087 echo ${UNAME_MACHINE}-unknown-atheos
1135 echo "$UNAME_MACHINE"-unknown-atheos
10881136 exit ;;
10891137 i*86:syllable:*:*)
1090 echo ${UNAME_MACHINE}-pc-syllable
1138 echo "$UNAME_MACHINE"-pc-syllable
10911139 exit ;;
10921140 i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
1093 echo i386-unknown-lynxos${UNAME_RELEASE}
1141 echo i386-unknown-lynxos"$UNAME_RELEASE"
10941142 exit ;;
10951143 i*86:*DOS:*:*)
1096 echo ${UNAME_MACHINE}-pc-msdosdjgpp
1097 exit ;;
1098 i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
1099 UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
1144 echo "$UNAME_MACHINE"-pc-msdosdjgpp
1145 exit ;;
1146 i*86:*:4.*:*)
1147 UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
11001148 if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
1101 echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
1149 echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
11021150 else
1103 echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
1151 echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
11041152 fi
11051153 exit ;;
11061154 i*86:*:5:[678]*)
11101158 *Pentium) UNAME_MACHINE=i586 ;;
11111159 *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
11121160 esac
1113 echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
1161 echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
11141162 exit ;;
11151163 i*86:*:3.2:*)
11161164 if test -f /usr/options/cb.name; then
11171165 UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
1118 echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
1166 echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
11191167 elif /bin/uname -X 2>/dev/null >/dev/null ; then
11201168 UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
11211169 (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
11251173 && UNAME_MACHINE=i686
11261174 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
11271175 && UNAME_MACHINE=i686
1128 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
1176 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
11291177 else
1130 echo ${UNAME_MACHINE}-pc-sysv32
1178 echo "$UNAME_MACHINE"-pc-sysv32
11311179 fi
11321180 exit ;;
11331181 pc:*:*:*)
11471195 exit ;;
11481196 i860:*:4.*:*) # i860-SVR4
11491197 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
1150 echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
1198 echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
11511199 else # Add other i860-SVR4 vendors below as they are discovered.
1152 echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
1200 echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4
11531201 fi
11541202 exit ;;
11551203 mini*:CTIX:SYS*5:*)
11691217 test -r /etc/.relid \
11701218 && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
11711219 /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
1172 && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
1220 && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
11731221 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
1174 && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
1222 && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
11751223 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
11761224 /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
11771225 && { echo i486-ncr-sysv4; exit; } ;;
11801228 test -r /etc/.relid \
11811229 && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
11821230 /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
1183 && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
1231 && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
11841232 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
1185 && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
1233 && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
11861234 /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
1187 && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
1235 && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
11881236 m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
1189 echo m68k-unknown-lynxos${UNAME_RELEASE}
1237 echo m68k-unknown-lynxos"$UNAME_RELEASE"
11901238 exit ;;
11911239 mc68030:UNIX_System_V:4.*:*)
11921240 echo m68k-atari-sysv4
11931241 exit ;;
11941242 TSUNAMI:LynxOS:2.*:*)
1195 echo sparc-unknown-lynxos${UNAME_RELEASE}
1243 echo sparc-unknown-lynxos"$UNAME_RELEASE"
11961244 exit ;;
11971245 rs6000:LynxOS:2.*:*)
1198 echo rs6000-unknown-lynxos${UNAME_RELEASE}
1246 echo rs6000-unknown-lynxos"$UNAME_RELEASE"
11991247 exit ;;
12001248 PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
1201 echo powerpc-unknown-lynxos${UNAME_RELEASE}
1249 echo powerpc-unknown-lynxos"$UNAME_RELEASE"
12021250 exit ;;
12031251 SM[BE]S:UNIX_SV:*:*)
1204 echo mips-dde-sysv${UNAME_RELEASE}
1252 echo mips-dde-sysv"$UNAME_RELEASE"
12051253 exit ;;
12061254 RM*:ReliantUNIX-*:*:*)
12071255 echo mips-sni-sysv4
12121260 *:SINIX-*:*:*)
12131261 if uname -p 2>/dev/null >/dev/null ; then
12141262 UNAME_MACHINE=`(uname -p) 2>/dev/null`
1215 echo ${UNAME_MACHINE}-sni-sysv4
1263 echo "$UNAME_MACHINE"-sni-sysv4
12161264 else
12171265 echo ns32k-sni-sysv
12181266 fi
12321280 exit ;;
12331281 i*86:VOS:*:*)
12341282 # From Paul.Green@stratus.com.
1235 echo ${UNAME_MACHINE}-stratus-vos
1283 echo "$UNAME_MACHINE"-stratus-vos
12361284 exit ;;
12371285 *:VOS:*:*)
12381286 # From Paul.Green@stratus.com.
12391287 echo hppa1.1-stratus-vos
12401288 exit ;;
12411289 mc68*:A/UX:*:*)
1242 echo m68k-apple-aux${UNAME_RELEASE}
1290 echo m68k-apple-aux"$UNAME_RELEASE"
12431291 exit ;;
12441292 news*:NEWS-OS:6*:*)
12451293 echo mips-sony-newsos6
12461294 exit ;;
12471295 R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
12481296 if [ -d /usr/nec ]; then
1249 echo mips-nec-sysv${UNAME_RELEASE}
1297 echo mips-nec-sysv"$UNAME_RELEASE"
12501298 else
1251 echo mips-unknown-sysv${UNAME_RELEASE}
1299 echo mips-unknown-sysv"$UNAME_RELEASE"
12521300 fi
12531301 exit ;;
12541302 BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
12671315 echo x86_64-unknown-haiku
12681316 exit ;;
12691317 SX-4:SUPER-UX:*:*)
1270 echo sx4-nec-superux${UNAME_RELEASE}
1318 echo sx4-nec-superux"$UNAME_RELEASE"
12711319 exit ;;
12721320 SX-5:SUPER-UX:*:*)
1273 echo sx5-nec-superux${UNAME_RELEASE}
1321 echo sx5-nec-superux"$UNAME_RELEASE"
12741322 exit ;;
12751323 SX-6:SUPER-UX:*:*)
1276 echo sx6-nec-superux${UNAME_RELEASE}
1324 echo sx6-nec-superux"$UNAME_RELEASE"
12771325 exit ;;
12781326 SX-7:SUPER-UX:*:*)
1279 echo sx7-nec-superux${UNAME_RELEASE}
1327 echo sx7-nec-superux"$UNAME_RELEASE"
12801328 exit ;;
12811329 SX-8:SUPER-UX:*:*)
1282 echo sx8-nec-superux${UNAME_RELEASE}
1330 echo sx8-nec-superux"$UNAME_RELEASE"
12831331 exit ;;
12841332 SX-8R:SUPER-UX:*:*)
1285 echo sx8r-nec-superux${UNAME_RELEASE}
1333 echo sx8r-nec-superux"$UNAME_RELEASE"
12861334 exit ;;
12871335 SX-ACE:SUPER-UX:*:*)
1288 echo sxace-nec-superux${UNAME_RELEASE}
1336 echo sxace-nec-superux"$UNAME_RELEASE"
12891337 exit ;;
12901338 Power*:Rhapsody:*:*)
1291 echo powerpc-apple-rhapsody${UNAME_RELEASE}
1339 echo powerpc-apple-rhapsody"$UNAME_RELEASE"
12921340 exit ;;
12931341 *:Rhapsody:*:*)
1294 echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
1342 echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
1343 exit ;;
1344 arm64:Darwin:*:*)
1345 echo aarch64-apple-darwin"$UNAME_RELEASE"
12951346 exit ;;
12961347 *:Darwin:*:*)
1297 UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
1298 eval $set_cc_for_build
1299 if test "$UNAME_PROCESSOR" = unknown ; then
1300 UNAME_PROCESSOR=powerpc
1301 fi
1302 if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
1303 if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
1304 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
1305 (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
1306 grep IS_64BIT_ARCH >/dev/null
1307 then
1308 case $UNAME_PROCESSOR in
1309 i386) UNAME_PROCESSOR=x86_64 ;;
1310 powerpc) UNAME_PROCESSOR=powerpc64 ;;
1311 esac
1312 fi
1348 UNAME_PROCESSOR=`uname -p`
1349 case $UNAME_PROCESSOR in
1350 unknown) UNAME_PROCESSOR=powerpc ;;
1351 esac
1352 if command -v xcode-select > /dev/null 2> /dev/null && \
1353 ! xcode-select --print-path > /dev/null 2> /dev/null ; then
1354 # Avoid executing cc if there is no toolchain installed as
1355 # cc will be a stub that puts up a graphical alert
1356 # prompting the user to install developer tools.
1357 CC_FOR_BUILD=no_compiler_found
1358 else
1359 set_cc_for_build
1360 fi
1361 if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
1362 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
1363 (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
1364 grep IS_64BIT_ARCH >/dev/null
1365 then
1366 case $UNAME_PROCESSOR in
1367 i386) UNAME_PROCESSOR=x86_64 ;;
1368 powerpc) UNAME_PROCESSOR=powerpc64 ;;
1369 esac
1370 fi
1371 # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
1372 if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
1373 (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
1374 grep IS_PPC >/dev/null
1375 then
1376 UNAME_PROCESSOR=powerpc
13131377 fi
13141378 elif test "$UNAME_PROCESSOR" = i386 ; then
1315 # Avoid executing cc on OS X 10.9, as it ships with a stub
1316 # that puts up a graphical alert prompting to install
1317 # developer tools. Any system running Mac OS X 10.7 or
1318 # later (Darwin 11 and later) is required to have a 64-bit
1319 # processor. This is not true of the ARM version of Darwin
1320 # that Apple uses in portable devices.
1321 UNAME_PROCESSOR=x86_64
1322 fi
1323 echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
1379 # uname -m returns i386 or x86_64
1380 UNAME_PROCESSOR=$UNAME_MACHINE
1381 fi
1382 echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
13241383 exit ;;
13251384 *:procnto*:*:* | *:QNX:[0123456789]*:*)
13261385 UNAME_PROCESSOR=`uname -p`
13281387 UNAME_PROCESSOR=i386
13291388 UNAME_MACHINE=pc
13301389 fi
1331 echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
1390 echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
13321391 exit ;;
13331392 *:QNX:*:4*)
13341393 echo i386-pc-qnx
13351394 exit ;;
1336 NEO-?:NONSTOP_KERNEL:*:*)
1337 echo neo-tandem-nsk${UNAME_RELEASE}
1395 NEO-*:NONSTOP_KERNEL:*:*)
1396 echo neo-tandem-nsk"$UNAME_RELEASE"
13381397 exit ;;
13391398 NSE-*:NONSTOP_KERNEL:*:*)
1340 echo nse-tandem-nsk${UNAME_RELEASE}
1341 exit ;;
1342 NSR-?:NONSTOP_KERNEL:*:*)
1343 echo nsr-tandem-nsk${UNAME_RELEASE}
1399 echo nse-tandem-nsk"$UNAME_RELEASE"
1400 exit ;;
1401 NSR-*:NONSTOP_KERNEL:*:*)
1402 echo nsr-tandem-nsk"$UNAME_RELEASE"
1403 exit ;;
1404 NSV-*:NONSTOP_KERNEL:*:*)
1405 echo nsv-tandem-nsk"$UNAME_RELEASE"
1406 exit ;;
1407 NSX-*:NONSTOP_KERNEL:*:*)
1408 echo nsx-tandem-nsk"$UNAME_RELEASE"
13441409 exit ;;
13451410 *:NonStop-UX:*:*)
13461411 echo mips-compaq-nonstopux
13491414 echo bs2000-siemens-sysv
13501415 exit ;;
13511416 DS/*:UNIX_System_V:*:*)
1352 echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
1417 echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
13531418 exit ;;
13541419 *:Plan9:*:*)
13551420 # "uname -m" is not consistent, so use $cputype instead. 386
13561421 # is converted to i386 for consistency with other x86
13571422 # operating systems.
1423 # shellcheck disable=SC2154
13581424 if test "$cputype" = 386; then
13591425 UNAME_MACHINE=i386
13601426 else
13611427 UNAME_MACHINE="$cputype"
13621428 fi
1363 echo ${UNAME_MACHINE}-unknown-plan9
1429 echo "$UNAME_MACHINE"-unknown-plan9
13641430 exit ;;
13651431 *:TOPS-10:*:*)
13661432 echo pdp10-unknown-tops10
13811447 echo pdp10-unknown-its
13821448 exit ;;
13831449 SEI:*:*:SEIUX)
1384 echo mips-sei-seiux${UNAME_RELEASE}
1450 echo mips-sei-seiux"$UNAME_RELEASE"
13851451 exit ;;
13861452 *:DragonFly:*:*)
1387 echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
1453 echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
13881454 exit ;;
13891455 *:*VMS:*:*)
13901456 UNAME_MACHINE=`(uname -p) 2>/dev/null`
1391 case "${UNAME_MACHINE}" in
1457 case "$UNAME_MACHINE" in
13921458 A*) echo alpha-dec-vms ; exit ;;
13931459 I*) echo ia64-dec-vms ; exit ;;
13941460 V*) echo vax-dec-vms ; exit ;;
13971463 echo i386-pc-xenix
13981464 exit ;;
13991465 i*86:skyos:*:*)
1400 echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
1466 echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
14011467 exit ;;
14021468 i*86:rdos:*:*)
1403 echo ${UNAME_MACHINE}-pc-rdos
1469 echo "$UNAME_MACHINE"-pc-rdos
14041470 exit ;;
14051471 i*86:AROS:*:*)
1406 echo ${UNAME_MACHINE}-pc-aros
1472 echo "$UNAME_MACHINE"-pc-aros
14071473 exit ;;
14081474 x86_64:VMkernel:*:*)
1409 echo ${UNAME_MACHINE}-unknown-esx
1475 echo "$UNAME_MACHINE"-unknown-esx
14101476 exit ;;
14111477 amd64:Isilon\ OneFS:*:*)
14121478 echo x86_64-unknown-onefs
14131479 exit ;;
1480 *:Unleashed:*:*)
1481 echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
1482 exit ;;
14141483 esac
14151484
1485 # No uname command or uname output not recognized.
1486 set_cc_for_build
1487 cat > "$dummy.c" <<EOF
1488 #ifdef _SEQUENT_
1489 #include <sys/types.h>
1490 #include <sys/utsname.h>
1491 #endif
1492 #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
1493 #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
1494 #include <signal.h>
1495 #if defined(_SIZE_T_) || defined(SIGLOST)
1496 #include <sys/utsname.h>
1497 #endif
1498 #endif
1499 #endif
1500 main ()
1501 {
1502 #if defined (sony)
1503 #if defined (MIPSEB)
1504 /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
1505 I don't know.... */
1506 printf ("mips-sony-bsd\n"); exit (0);
1507 #else
1508 #include <sys/param.h>
1509 printf ("m68k-sony-newsos%s\n",
1510 #ifdef NEWSOS4
1511 "4"
1512 #else
1513 ""
1514 #endif
1515 ); exit (0);
1516 #endif
1517 #endif
1518
1519 #if defined (NeXT)
1520 #if !defined (__ARCHITECTURE__)
1521 #define __ARCHITECTURE__ "m68k"
1522 #endif
1523 int version;
1524 version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
1525 if (version < 4)
1526 printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
1527 else
1528 printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
1529 exit (0);
1530 #endif
1531
1532 #if defined (MULTIMAX) || defined (n16)
1533 #if defined (UMAXV)
1534 printf ("ns32k-encore-sysv\n"); exit (0);
1535 #else
1536 #if defined (CMU)
1537 printf ("ns32k-encore-mach\n"); exit (0);
1538 #else
1539 printf ("ns32k-encore-bsd\n"); exit (0);
1540 #endif
1541 #endif
1542 #endif
1543
1544 #if defined (__386BSD__)
1545 printf ("i386-pc-bsd\n"); exit (0);
1546 #endif
1547
1548 #if defined (sequent)
1549 #if defined (i386)
1550 printf ("i386-sequent-dynix\n"); exit (0);
1551 #endif
1552 #if defined (ns32000)
1553 printf ("ns32k-sequent-dynix\n"); exit (0);
1554 #endif
1555 #endif
1556
1557 #if defined (_SEQUENT_)
1558 struct utsname un;
1559
1560 uname(&un);
1561 if (strncmp(un.version, "V2", 2) == 0) {
1562 printf ("i386-sequent-ptx2\n"); exit (0);
1563 }
1564 if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
1565 printf ("i386-sequent-ptx1\n"); exit (0);
1566 }
1567 printf ("i386-sequent-ptx\n"); exit (0);
1568 #endif
1569
1570 #if defined (vax)
1571 #if !defined (ultrix)
1572 #include <sys/param.h>
1573 #if defined (BSD)
1574 #if BSD == 43
1575 printf ("vax-dec-bsd4.3\n"); exit (0);
1576 #else
1577 #if BSD == 199006
1578 printf ("vax-dec-bsd4.3reno\n"); exit (0);
1579 #else
1580 printf ("vax-dec-bsd\n"); exit (0);
1581 #endif
1582 #endif
1583 #else
1584 printf ("vax-dec-bsd\n"); exit (0);
1585 #endif
1586 #else
1587 #if defined(_SIZE_T_) || defined(SIGLOST)
1588 struct utsname un;
1589 uname (&un);
1590 printf ("vax-dec-ultrix%s\n", un.release); exit (0);
1591 #else
1592 printf ("vax-dec-ultrix\n"); exit (0);
1593 #endif
1594 #endif
1595 #endif
1596 #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
1597 #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
1598 #if defined(_SIZE_T_) || defined(SIGLOST)
1599 struct utsname *un;
1600 uname (&un);
1601 printf ("mips-dec-ultrix%s\n", un.release); exit (0);
1602 #else
1603 printf ("mips-dec-ultrix\n"); exit (0);
1604 #endif
1605 #endif
1606 #endif
1607
1608 #if defined (alliant) && defined (i860)
1609 printf ("i860-alliant-bsd\n"); exit (0);
1610 #endif
1611
1612 exit (1);
1613 }
1614 EOF
1615
1616 $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` &&
1617 { echo "$SYSTEM_NAME"; exit; }
1618
1619 # Apollos put the system type in the environment.
1620 test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
1621
1622 echo "$0: unable to guess system type" >&2
1623
1624 case "$UNAME_MACHINE:$UNAME_SYSTEM" in
1625 mips:Linux | mips64:Linux)
1626 # If we got here on MIPS GNU/Linux, output extra information.
1627 cat >&2 <<EOF
1628
1629 NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
1630 the system type. Please install a C compiler and try again.
1631 EOF
1632 ;;
1633 esac
1634
14161635 cat >&2 <<EOF
1417 $0: unable to guess system type
14181636
14191637 This script (version $timestamp), has failed to recognize the
1420 operating system you are using. If your script is old, overwrite
1421 config.guess and config.sub with the latest versions from:
1422
1423 http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
1638 operating system you are using. If your script is old, overwrite *all*
1639 copies of config.guess and config.sub with the latest versions from:
1640
1641 https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
14241642 and
1425 http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
1643 https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
1644 EOF
1645
1646 year=`echo $timestamp | sed 's,-.*,,'`
1647 # shellcheck disable=SC2003
1648 if test "`expr "\`date +%Y\`" - "$year"`" -lt 3 ; then
1649 cat >&2 <<EOF
14261650
14271651 If $0 has already been updated, send the following data and any
14281652 information you think might be pertinent to config-patches@gnu.org to
14451669 /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
14461670 /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
14471671
1448 UNAME_MACHINE = ${UNAME_MACHINE}
1449 UNAME_RELEASE = ${UNAME_RELEASE}
1450 UNAME_SYSTEM = ${UNAME_SYSTEM}
1451 UNAME_VERSION = ${UNAME_VERSION}
1672 UNAME_MACHINE = "$UNAME_MACHINE"
1673 UNAME_RELEASE = "$UNAME_RELEASE"
1674 UNAME_SYSTEM = "$UNAME_SYSTEM"
1675 UNAME_VERSION = "$UNAME_VERSION"
14521676 EOF
1677 fi
14531678
14541679 exit 1
14551680
14561681 # Local variables:
1457 # eval: (add-hook 'write-file-hooks 'time-stamp)
1682 # eval: (add-hook 'before-save-hook 'time-stamp)
14581683 # time-stamp-start: "timestamp='"
14591684 # time-stamp-format: "%:y-%02m-%02d"
14601685 # time-stamp-end: "'"
2626
2727 /* Whether daemon is deprecated */
2828 #undef DEPRECATED_DAEMON
29
30 /* Define this to enable kernel based UDP source port randomization. */
31 #undef DISABLE_EXPLICIT_PORT_RANDOMISATION
2932
3033 /* default dnstap socket path */
3134 #undef DNSTAP_SOCKET_PATH
175178 /* Define to 1 if you have the `endservent' function. */
176179 #undef HAVE_ENDSERVENT
177180
181 /* Define to 1 if you have the `ENGINE_cleanup' function. */
182 #undef HAVE_ENGINE_CLEANUP
183
178184 /* Define to 1 if you have the `ERR_free_strings' function. */
179185 #undef HAVE_ERR_FREE_STRINGS
180186
379385 /* Define to 1 if you have the <openssl/conf.h> header file. */
380386 #undef HAVE_OPENSSL_CONF_H
381387
388 /* Define to 1 if you have the <openssl/core_names.h> header file. */
389 #undef HAVE_OPENSSL_CORE_NAMES_H
390
382391 /* Define to 1 if you have the <openssl/dh.h> header file. */
383392 #undef HAVE_OPENSSL_DH_H
384393
493502 /* Define to 1 if you have the `SSL_CTX_set_security_level' function. */
494503 #undef HAVE_SSL_CTX_SET_SECURITY_LEVEL
495504
496 /* Define to 1 if you have the `SSL_CTX_set_tlsext_ticket_key_cb' function. */
497 #undef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_CB
505 /* Define to 1 if you have the `SSL_CTX_set_tlsext_ticket_key_evp_cb'
506 function. */
507 #undef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB
498508
499509 /* Define to 1 if you have the `SSL_get0_peername' function. */
500510 #undef HAVE_SSL_GET0_PEERNAME
588598
589599 /* Define to 1 if you have the <sys/wait.h> header file. */
590600 #undef HAVE_SYS_WAIT_H
601
602 /* Define to 1 if you have the <TargetConditionals.h> header file. */
603 #undef HAVE_TARGETCONDITIONALS_H
591604
592605 /* Define to 1 if you have the <time.h> header file. */
593606 #undef HAVE_TIME_H
804817 /* Define to 1 to use ipset support */
805818 #undef USE_IPSET
806819
820 /* Define if you enable libevent */
821 #undef USE_LIBEVENT
822
807823 /* Define if you want to use internal select based events */
808824 #undef USE_MINI_EVENT
809825
852868
853869 /* the version of the windows API enabled */
854870 #undef WINVER
871
872 /* Define if you want dynlib module. */
873 #undef WITH_DYNLIBMODULE
855874
856875 /* Define if you want Python module. */
857876 #undef WITH_PYTHONMODULE
+1542
-1514
config.sub less more
0 #!/usr/bin/sh
0 #! /bin/sh
11 # Configuration validation subroutine script.
2 # Copyright 1992-2016 Free Software Foundation, Inc.
3
4 timestamp='2016-09-05'
2 # Copyright 1992-2020 Free Software Foundation, Inc.
3
4 timestamp='2020-07-10'
55
66 # This file is free software; you can redistribute it and/or modify it
77 # under the terms of the GNU General Public License as published by
1414 # General Public License for more details.
1515 #
1616 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, see <http://www.gnu.org/licenses/>.
17 # along with this program; if not, see <https://www.gnu.org/licenses/>.
1818 #
1919 # As a special exception to the GNU General Public License, if you
2020 # distribute this file as part of a program that contains a
3232 # Otherwise, we print the canonical config type on stdout and succeed.
3333
3434 # You can get the latest version of this script from:
35 # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
35 # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
3636
3737 # This file is supposed to be the same for all GNU packages
3838 # and recognize all the CPU types, system types and aliases
5656
5757 Canonicalize a configuration name.
5858
59 Operation modes:
59 Options:
6060 -h, --help print this help, then exit
6161 -t, --time-stamp print date of last modification, then exit
6262 -v, --version print version number, then exit
6666 version="\
6767 GNU config.sub ($timestamp)
6868
69 Copyright 1992-2016 Free Software Foundation, Inc.
69 Copyright 1992-2020 Free Software Foundation, Inc.
7070
7171 This is free software; see the source for copying conditions. There is NO
7272 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
8888 - ) # Use stdin as input.
8989 break ;;
9090 -* )
91 echo "$me: invalid option $1$help"
91 echo "$me: invalid option $1$help" >&2
9292 exit 1 ;;
9393
9494 *local*)
9595 # First pass through any local machine types.
96 echo $1
96 echo "$1"
9797 exit ;;
9898
9999 * )
109109 exit 1;;
110110 esac
111111
112 # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
113 # Here we must recognize all the valid KERNEL-OS combinations.
114 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
115 case $maybe_os in
116 nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
117 linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
118 knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
119 kopensolaris*-gnu* | cloudabi*-eabi* | \
120 storm-chaos* | os2-emx* | rtmk-nova*)
121 os=-$maybe_os
122 basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
123 ;;
124 android-linux)
125 os=-linux-android
126 basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
127 ;;
128 *)
129 basic_machine=`echo $1 | sed 's/-[^-]*$//'`
130 if [ $basic_machine != $1 ]
131 then os=`echo $1 | sed 's/.*-/-/'`
132 else os=; fi
133 ;;
112 # Split fields of configuration type
113 # shellcheck disable=SC2162
114 IFS="-" read field1 field2 field3 field4 <<EOF
115 $1
116 EOF
117
118 # Separate into logical components for further validation
119 case $1 in
120 *-*-*-*-*)
121 echo Invalid configuration \`"$1"\': more than four components >&2
122 exit 1
123 ;;
124 *-*-*-*)
125 basic_machine=$field1-$field2
126 basic_os=$field3-$field4
127 ;;
128 *-*-*)
129 # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
130 # parts
131 maybe_os=$field2-$field3
132 case $maybe_os in
133 nto-qnx* | linux-* | uclinux-uclibc* \
134 | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
135 | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
136 | storm-chaos* | os2-emx* | rtmk-nova*)
137 basic_machine=$field1
138 basic_os=$maybe_os
139 ;;
140 android-linux)
141 basic_machine=$field1-unknown
142 basic_os=linux-android
143 ;;
144 *)
145 basic_machine=$field1-$field2
146 basic_os=$field3
147 ;;
148 esac
149 ;;
150 *-*)
151 # A lone config we happen to match not fitting any pattern
152 case $field1-$field2 in
153 decstation-3100)
154 basic_machine=mips-dec
155 basic_os=
156 ;;
157 *-*)
158 # Second component is usually, but not always the OS
159 case $field2 in
160 # Prevent following clause from handling this valid os
161 sun*os*)
162 basic_machine=$field1
163 basic_os=$field2
164 ;;
165 # Manufacturers
166 dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
167 | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
168 | unicom* | ibm* | next | hp | isi* | apollo | altos* \
169 | convergent* | ncr* | news | 32* | 3600* | 3100* \
170 | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
171 | ultra | tti* | harris | dolphin | highlevel | gould \
172 | cbm | ns | masscomp | apple | axis | knuth | cray \
173 | microblaze* | sim | cisco \
174 | oki | wec | wrs | winbond)
175 basic_machine=$field1-$field2
176 basic_os=
177 ;;
178 *)
179 basic_machine=$field1
180 basic_os=$field2
181 ;;
182 esac
183 ;;
184 esac
185 ;;
186 *)
187 # Convert single-component short-hands not valid as part of
188 # multi-component configurations.
189 case $field1 in
190 386bsd)
191 basic_machine=i386-pc
192 basic_os=bsd
193 ;;
194 a29khif)
195 basic_machine=a29k-amd
196 basic_os=udi
197 ;;
198 adobe68k)
199 basic_machine=m68010-adobe
200 basic_os=scout
201 ;;
202 alliant)
203 basic_machine=fx80-alliant
204 basic_os=
205 ;;
206 altos | altos3068)
207 basic_machine=m68k-altos
208 basic_os=
209 ;;
210 am29k)
211 basic_machine=a29k-none
212 basic_os=bsd
213 ;;
214 amdahl)
215 basic_machine=580-amdahl
216 basic_os=sysv
217 ;;
218 amiga)
219 basic_machine=m68k-unknown
220 basic_os=
221 ;;
222 amigaos | amigados)
223 basic_machine=m68k-unknown
224 basic_os=amigaos
225 ;;
226 amigaunix | amix)
227 basic_machine=m68k-unknown
228 basic_os=sysv4
229 ;;
230 apollo68)
231 basic_machine=m68k-apollo
232 basic_os=sysv
233 ;;
234 apollo68bsd)
235 basic_machine=m68k-apollo
236 basic_os=bsd
237 ;;
238 aros)
239 basic_machine=i386-pc
240 basic_os=aros
241 ;;
242 aux)
243 basic_machine=m68k-apple
244 basic_os=aux
245 ;;
246 balance)
247 basic_machine=ns32k-sequent
248 basic_os=dynix
249 ;;
250 blackfin)
251 basic_machine=bfin-unknown
252 basic_os=linux
253 ;;
254 cegcc)
255 basic_machine=arm-unknown
256 basic_os=cegcc
257 ;;
258 convex-c1)
259 basic_machine=c1-convex
260 basic_os=bsd
261 ;;
262 convex-c2)
263 basic_machine=c2-convex
264 basic_os=bsd
265 ;;
266 convex-c32)
267 basic_machine=c32-convex
268 basic_os=bsd
269 ;;
270 convex-c34)
271 basic_machine=c34-convex
272 basic_os=bsd
273 ;;
274 convex-c38)
275 basic_machine=c38-convex
276 basic_os=bsd
277 ;;
278 cray)
279 basic_machine=j90-cray
280 basic_os=unicos
281 ;;
282 crds | unos)
283 basic_machine=m68k-crds
284 basic_os=
285 ;;
286 da30)
287 basic_machine=m68k-da30
288 basic_os=
289 ;;
290 decstation | pmax | pmin | dec3100 | decstatn)
291 basic_machine=mips-dec
292 basic_os=
293 ;;
294 delta88)
295 basic_machine=m88k-motorola
296 basic_os=sysv3
297 ;;
298 dicos)
299 basic_machine=i686-pc
300 basic_os=dicos
301 ;;
302 djgpp)
303 basic_machine=i586-pc
304 basic_os=msdosdjgpp
305 ;;
306 ebmon29k)
307 basic_machine=a29k-amd
308 basic_os=ebmon
309 ;;
310 es1800 | OSE68k | ose68k | ose | OSE)
311 basic_machine=m68k-ericsson
312 basic_os=ose
313 ;;
314 gmicro)
315 basic_machine=tron-gmicro
316 basic_os=sysv
317 ;;
318 go32)
319 basic_machine=i386-pc
320 basic_os=go32
321 ;;
322 h8300hms)
323 basic_machine=h8300-hitachi
324 basic_os=hms
325 ;;
326 h8300xray)
327 basic_machine=h8300-hitachi
328 basic_os=xray
329 ;;
330 h8500hms)
331 basic_machine=h8500-hitachi
332 basic_os=hms
333 ;;
334 harris)
335 basic_machine=m88k-harris
336 basic_os=sysv3
337 ;;
338 hp300 | hp300hpux)
339 basic_machine=m68k-hp
340 basic_os=hpux
341 ;;
342 hp300bsd)
343 basic_machine=m68k-hp
344 basic_os=bsd
345 ;;
346 hppaosf)
347 basic_machine=hppa1.1-hp
348 basic_os=osf
349 ;;
350 hppro)
351 basic_machine=hppa1.1-hp
352 basic_os=proelf
353 ;;
354 i386mach)
355 basic_machine=i386-mach
356 basic_os=mach
357 ;;
358 isi68 | isi)
359 basic_machine=m68k-isi
360 basic_os=sysv
361 ;;
362 m68knommu)
363 basic_machine=m68k-unknown
364 basic_os=linux
365 ;;
366 magnum | m3230)
367 basic_machine=mips-mips
368 basic_os=sysv
369 ;;
370 merlin)
371 basic_machine=ns32k-utek
372 basic_os=sysv
373 ;;
374 mingw64)
375 basic_machine=x86_64-pc
376 basic_os=mingw64
377 ;;
378 mingw32)
379 basic_machine=i686-pc
380 basic_os=mingw32
381 ;;
382 mingw32ce)
383 basic_machine=arm-unknown
384 basic_os=mingw32ce
385 ;;
386 monitor)
387 basic_machine=m68k-rom68k
388 basic_os=coff
389 ;;
390 morphos)
391 basic_machine=powerpc-unknown
392 basic_os=morphos
393 ;;
394 moxiebox)
395 basic_machine=moxie-unknown
396 basic_os=moxiebox
397 ;;
398 msdos)
399 basic_machine=i386-pc
400 basic_os=msdos
401 ;;
402 msys)
403 basic_machine=i686-pc
404 basic_os=msys
405 ;;
406 mvs)
407 basic_machine=i370-ibm
408 basic_os=mvs
409 ;;
410 nacl)
411 basic_machine=le32-unknown
412 basic_os=nacl
413 ;;
414 ncr3000)
415 basic_machine=i486-ncr
416 basic_os=sysv4
417 ;;
418 netbsd386)
419 basic_machine=i386-pc
420 basic_os=netbsd
421 ;;
422 netwinder)
423 basic_machine=armv4l-rebel
424 basic_os=linux
425 ;;
426 news | news700 | news800 | news900)
427 basic_machine=m68k-sony
428 basic_os=newsos
429 ;;
430 news1000)
431 basic_machine=m68030-sony
432 basic_os=newsos
433 ;;
434 necv70)
435 basic_machine=v70-nec
436 basic_os=sysv
437 ;;
438 nh3000)
439 basic_machine=m68k-harris
440 basic_os=cxux
441 ;;
442 nh[45]000)
443 basic_machine=m88k-harris
444 basic_os=cxux
445 ;;
446 nindy960)
447 basic_machine=i960-intel
448 basic_os=nindy
449 ;;
450 mon960)
451 basic_machine=i960-intel
452 basic_os=mon960
453 ;;
454 nonstopux)
455 basic_machine=mips-compaq
456 basic_os=nonstopux
457 ;;
458 os400)
459 basic_machine=powerpc-ibm
460 basic_os=os400
461 ;;
462 OSE68000 | ose68000)
463 basic_machine=m68000-ericsson
464 basic_os=ose
465 ;;
466 os68k)
467 basic_machine=m68k-none
468 basic_os=os68k
469 ;;
470 paragon)
471 basic_machine=i860-intel
472 basic_os=osf
473 ;;
474 parisc)
475 basic_machine=hppa-unknown
476 basic_os=linux
477 ;;
478 psp)
479 basic_machine=mipsallegrexel-sony
480 basic_os=psp
481 ;;
482 pw32)
483 basic_machine=i586-unknown
484 basic_os=pw32
485 ;;
486 rdos | rdos64)
487 basic_machine=x86_64-pc
488 basic_os=rdos
489 ;;
490 rdos32)
491 basic_machine=i386-pc
492 basic_os=rdos
493 ;;
494 rom68k)
495 basic_machine=m68k-rom68k
496 basic_os=coff
497 ;;
498 sa29200)
499 basic_machine=a29k-amd
500 basic_os=udi
501 ;;
502 sei)
503 basic_machine=mips-sei
504 basic_os=seiux
505 ;;
506 sequent)
507 basic_machine=i386-sequent
508 basic_os=
509 ;;
510 sps7)
511 basic_machine=m68k-bull
512 basic_os=sysv2
513 ;;
514 st2000)
515 basic_machine=m68k-tandem
516 basic_os=
517 ;;
518 stratus)
519 basic_machine=i860-stratus
520 basic_os=sysv4
521 ;;
522 sun2)
523 basic_machine=m68000-sun
524 basic_os=
525 ;;
526 sun2os3)
527 basic_machine=m68000-sun
528 basic_os=sunos3
529 ;;
530 sun2os4)
531 basic_machine=m68000-sun
532 basic_os=sunos4
533 ;;
534 sun3)
535 basic_machine=m68k-sun
536 basic_os=
537 ;;
538 sun3os3)
539 basic_machine=m68k-sun
540 basic_os=sunos3
541 ;;
542 sun3os4)
543 basic_machine=m68k-sun
544 basic_os=sunos4
545 ;;
546 sun4)
547 basic_machine=sparc-sun
548 basic_os=
549 ;;
550 sun4os3)
551 basic_machine=sparc-sun
552 basic_os=sunos3
553 ;;
554 sun4os4)
555 basic_machine=sparc-sun
556 basic_os=sunos4
557 ;;
558 sun4sol2)
559 basic_machine=sparc-sun
560 basic_os=solaris2
561 ;;
562 sun386 | sun386i | roadrunner)
563 basic_machine=i386-sun
564 basic_os=
565 ;;
566 sv1)
567 basic_machine=sv1-cray
568 basic_os=unicos
569 ;;
570 symmetry)
571 basic_machine=i386-sequent
572 basic_os=dynix
573 ;;
574 t3e)
575 basic_machine=alphaev5-cray
576 basic_os=unicos
577 ;;
578 t90)
579 basic_machine=t90-cray
580 basic_os=unicos
581 ;;
582 toad1)
583 basic_machine=pdp10-xkl
584 basic_os=tops20
585 ;;
586 tpf)
587 basic_machine=s390x-ibm
588 basic_os=tpf
589 ;;
590 udi29k)
591 basic_machine=a29k-amd
592 basic_os=udi
593 ;;
594 ultra3)
595 basic_machine=a29k-nyu
596 basic_os=sym1
597 ;;
598 v810 | necv810)
599 basic_machine=v810-nec
600 basic_os=none
601 ;;
602 vaxv)
603 basic_machine=vax-dec
604 basic_os=sysv
605 ;;
606 vms)
607 basic_machine=vax-dec
608 basic_os=vms
609 ;;
610 vsta)
611 basic_machine=i386-pc
612 basic_os=vsta
613 ;;
614 vxworks960)
615 basic_machine=i960-wrs
616 basic_os=vxworks
617 ;;
618 vxworks68)
619 basic_machine=m68k-wrs
620 basic_os=vxworks
621 ;;
622 vxworks29k)
623 basic_machine=a29k-wrs
624 basic_os=vxworks
625 ;;
626 xbox)
627 basic_machine=i686-pc
628 basic_os=mingw32
629 ;;
630 ymp)
631 basic_machine=ymp-cray
632 basic_os=unicos
633 ;;
634 *)
635 basic_machine=$1
636 basic_os=
637 ;;
638 esac
639 ;;
134640 esac
135641
136 ### Let's recognize common machines as not being operating systems so
137 ### that things like config.sub decstation-3100 work. We also
138 ### recognize some manufacturers as not being operating systems, so we
139 ### can provide default operating systems below.
140 case $os in
141 -sun*os*)
142 # Prevent following clause from handling this invalid input.
143 ;;
144 -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
145 -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
146 -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
147 -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
148 -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
149 -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
150 -apple | -axis | -knuth | -cray | -microblaze*)
151 os=
152 basic_machine=$1
153 ;;
154 -bluegene*)
155 os=-cnk
156 ;;
157 -sim | -cisco | -oki | -wec | -winbond)
158 os=
159 basic_machine=$1
160 ;;
161 -scout)
162 ;;
163 -wrs)
164 os=-vxworks
165 basic_machine=$1
166 ;;
167 -chorusos*)
168 os=-chorusos
169 basic_machine=$1
170 ;;
171 -chorusrdb)
172 os=-chorusrdb
173 basic_machine=$1
174 ;;
175 -hiux*)
176 os=-hiuxwe2
177 ;;
178 -sco6)
179 os=-sco5v6
180 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
181 ;;
182 -sco5)
183 os=-sco3.2v5
184 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
185 ;;
186 -sco4)
187 os=-sco3.2v4
188 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
189 ;;
190 -sco3.2.[4-9]*)
191 os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
192 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
193 ;;
194 -sco3.2v[4-9]*)
195 # Don't forget version if it is 3.2v4 or newer.
196 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
197 ;;
198 -sco5v6*)
199 # Don't forget version if it is 3.2v4 or newer.
200 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
201 ;;
202 -sco*)
203 os=-sco3.2v2
204 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
205 ;;
206 -udk*)
207 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
208 ;;
209 -isc)
210 os=-isc2.2
211 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
212 ;;
213 -clix*)
214 basic_machine=clipper-intergraph
215 ;;
216 -isc*)
217 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
218 ;;
219 -lynx*178)
220 os=-lynxos178
221 ;;
222 -lynx*5)
223 os=-lynxos5
224 ;;
225 -lynx*)
226 os=-lynxos
227 ;;
228 -ptx*)
229 basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
230 ;;
231 -windowsnt*)
232 os=`echo $os | sed -e 's/windowsnt/winnt/'`
233 ;;
234 -psos*)
235 os=-psos
236 ;;
237 -mint | -mint[0-9]*)
238 basic_machine=m68k-atari
239 os=-mint
240 ;;
241 esac
242
243 # Decode aliases for certain CPU-COMPANY combinations.
642 # Decode 1-component or ad-hoc basic machines
244643 case $basic_machine in
245 # Recognize the basic CPU types without company name.
246 # Some are omitted here because they have special meanings below.
247 1750a | 580 \
248 | a29k \
249 | aarch64 | aarch64_be \
250 | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
251 | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
252 | am33_2.0 \
253 | arc | arceb \
254 | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
255 | avr | avr32 \
256 | ba \
257 | be32 | be64 \
258 | bfin \
259 | c4x | c8051 | clipper \
260 | d10v | d30v | dlx | dsp16xx \
261 | e2k | epiphany \
262 | fido | fr30 | frv | ft32 \
263 | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
264 | hexagon \
265 | i370 | i860 | i960 | ia64 \
266 | ip2k | iq2000 \
267 | k1om \
268 | le32 | le64 \
269 | lm32 \
270 | m32c | m32r | m32rle | m68000 | m68k | m88k \
271 | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
272 | mips | mipsbe | mipseb | mipsel | mipsle \
273 | mips16 \
274 | mips64 | mips64el \
275 | mips64octeon | mips64octeonel \
276 | mips64orion | mips64orionel \
277 | mips64r5900 | mips64r5900el \
278 | mips64vr | mips64vrel \
279 | mips64vr4100 | mips64vr4100el \
280 | mips64vr4300 | mips64vr4300el \
281 | mips64vr5000 | mips64vr5000el \
282 | mips64vr5900 | mips64vr5900el \
283 | mipsisa32 | mipsisa32el \
284 | mipsisa32r2 | mipsisa32r2el \
285 | mipsisa32r6 | mipsisa32r6el \
286 | mipsisa64 | mipsisa64el \
287 | mipsisa64r2 | mipsisa64r2el \
288 | mipsisa64r6 | mipsisa64r6el \
289 | mipsisa64sb1 | mipsisa64sb1el \
290 | mipsisa64sr71k | mipsisa64sr71kel \
291 | mipsr5900 | mipsr5900el \
292 | mipstx39 | mipstx39el \
293 | mn10200 | mn10300 \
294 | moxie \
295 | mt \
296 | msp430 \
297 | nds32 | nds32le | nds32be \
298 | nios | nios2 | nios2eb | nios2el \
299 | ns16k | ns32k \
300 | open8 | or1k | or1knd | or32 \
301 | pdp10 | pdp11 | pj | pjl \
302 | powerpc | powerpc64 | powerpc64le | powerpcle \
303 | pyramid \
304 | riscv32 | riscv64 \
305 | rl78 | rx \
306 | score \
307 | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
308 | sh64 | sh64le \
309 | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
310 | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
311 | spu \
312 | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
313 | ubicom32 \
314 | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
315 | visium \
316 | we32k \
317 | x86 | xc16x | xstormy16 | xtensa \
318 | z8k | z80)
319 basic_machine=$basic_machine-unknown
320 ;;
321 c54x)
322 basic_machine=tic54x-unknown
323 ;;
324 c55x)
325 basic_machine=tic55x-unknown
326 ;;
327 c6x)
328 basic_machine=tic6x-unknown
644 # Here we handle the default manufacturer of certain CPU types. It is in
645 # some cases the only manufacturer, in others, it is the most popular.
646 w89k)
647 cpu=hppa1.1
648 vendor=winbond
649 ;;
650 op50n)
651 cpu=hppa1.1
652 vendor=oki
653 ;;
654 op60c)
655 cpu=hppa1.1
656 vendor=oki
657 ;;
658 ibm*)
659 cpu=i370
660 vendor=ibm
661 ;;
662 orion105)
663 cpu=clipper
664 vendor=highlevel
665 ;;
666 mac | mpw | mac-mpw)
667 cpu=m68k
668 vendor=apple
669 ;;
670 pmac | pmac-mpw)
671 cpu=powerpc
672 vendor=apple
673 ;;
674
675 # Recognize the various machine names and aliases which stand
676 # for a CPU type and a company and sometimes even an OS.
677 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
678 cpu=m68000
679 vendor=att
680 ;;
681 3b*)
682 cpu=we32k
683 vendor=att
684 ;;
685 bluegene*)
686 cpu=powerpc
687 vendor=ibm
688 basic_os=cnk
689 ;;
690 decsystem10* | dec10*)
691 cpu=pdp10
692 vendor=dec
693 basic_os=tops10
694 ;;
695 decsystem20* | dec20*)
696 cpu=pdp10
697 vendor=dec
698 basic_os=tops20
699 ;;
700 delta | 3300 | motorola-3300 | motorola-delta \
701 | 3300-motorola | delta-motorola)
702 cpu=m68k
703 vendor=motorola
704 ;;
705 dpx2*)
706 cpu=m68k
707 vendor=bull
708 basic_os=sysv3
709 ;;
710 encore | umax | mmax)
711 cpu=ns32k
712 vendor=encore
713 ;;
714 elxsi)
715 cpu=elxsi
716 vendor=elxsi
717 basic_os=${basic_os:-bsd}
718 ;;
719 fx2800)
720 cpu=i860
721 vendor=alliant
722 ;;
723 genix)
724 cpu=ns32k
725 vendor=ns
726 ;;
727 h3050r* | hiux*)
728 cpu=hppa1.1
729 vendor=hitachi
730 basic_os=hiuxwe2
731 ;;
732 hp3k9[0-9][0-9] | hp9[0-9][0-9])
733 cpu=hppa1.0
734 vendor=hp
735 ;;
736 hp9k2[0-9][0-9] | hp9k31[0-9])
737 cpu=m68000
738 vendor=hp
739 ;;
740 hp9k3[2-9][0-9])
741 cpu=m68k
742 vendor=hp
743 ;;
744 hp9k6[0-9][0-9] | hp6[0-9][0-9])
745 cpu=hppa1.0
746 vendor=hp
747 ;;
748 hp9k7[0-79][0-9] | hp7[0-79][0-9])
749 cpu=hppa1.1
750 vendor=hp
751 ;;
752 hp9k78[0-9] | hp78[0-9])
753 # FIXME: really hppa2.0-hp
754 cpu=hppa1.1
755 vendor=hp
756 ;;
757 hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
758 # FIXME: really hppa2.0-hp
759 cpu=hppa1.1
760 vendor=hp
761 ;;
762 hp9k8[0-9][13679] | hp8[0-9][13679])
763 cpu=hppa1.1
764 vendor=hp
765 ;;
766 hp9k8[0-9][0-9] | hp8[0-9][0-9])
767 cpu=hppa1.0
768 vendor=hp
769 ;;
770 i*86v32)
771 cpu=`echo "$1" | sed -e 's/86.*/86/'`
772 vendor=pc
773 basic_os=sysv32
774 ;;
775 i*86v4*)
776 cpu=`echo "$1" | sed -e 's/86.*/86/'`
777 vendor=pc
778 basic_os=sysv4
779 ;;
780 i*86v)
781 cpu=`echo "$1" | sed -e 's/86.*/86/'`
782 vendor=pc
783 basic_os=sysv
784 ;;
785 i*86sol2)
786 cpu=`echo "$1" | sed -e 's/86.*/86/'`
787 vendor=pc
788 basic_os=solaris2
789 ;;
790 j90 | j90-cray)
791 cpu=j90
792 vendor=cray
793 basic_os=${basic_os:-unicos}
794 ;;
795 iris | iris4d)
796 cpu=mips
797 vendor=sgi
798 case $basic_os in
799 irix*)
800 ;;
801 *)
802 basic_os=irix4
803 ;;
804 esac
805 ;;
806 miniframe)
807 cpu=m68000
808 vendor=convergent
809 ;;
810 *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
811 cpu=m68k
812 vendor=atari
813 basic_os=mint
814 ;;
815 news-3600 | risc-news)
816 cpu=mips
817 vendor=sony
818 basic_os=newsos
819 ;;
820 next | m*-next)
821 cpu=m68k
822 vendor=next
823 case $basic_os in
824 openstep*)
825 ;;
826 nextstep*)
827 ;;
828 ns2*)
829 basic_os=nextstep2
830 ;;
831 *)
832 basic_os=nextstep3
833 ;;
834 esac
835 ;;
836 np1)
837 cpu=np1
838 vendor=gould
839 ;;
840 op50n-* | op60c-*)
841 cpu=hppa1.1
842 vendor=oki
843 basic_os=proelf
844 ;;
845 pa-hitachi)
846 cpu=hppa1.1
847 vendor=hitachi
848 basic_os=hiuxwe2
849 ;;
850 pbd)
851 cpu=sparc
852 vendor=tti
853 ;;
854 pbb)
855 cpu=m68k
856 vendor=tti
857 ;;
858 pc532)
859 cpu=ns32k
860 vendor=pc532
861 ;;
862 pn)
863 cpu=pn
864 vendor=gould
865 ;;
866 power)
867 cpu=power
868 vendor=ibm
869 ;;
870 ps2)
871 cpu=i386
872 vendor=ibm
873 ;;
874 rm[46]00)
875 cpu=mips
876 vendor=siemens
877 ;;
878 rtpc | rtpc-*)
879 cpu=romp
880 vendor=ibm
881 ;;
882 sde)
883 cpu=mipsisa32
884 vendor=sde
885 basic_os=${basic_os:-elf}
886 ;;
887 simso-wrs)
888 cpu=sparclite
889 vendor=wrs
890 basic_os=vxworks
891 ;;
892 tower | tower-32)
893 cpu=m68k
894 vendor=ncr
895 ;;
896 vpp*|vx|vx-*)
897 cpu=f301
898 vendor=fujitsu
899 ;;
900 w65)
901 cpu=w65
902 vendor=wdc
903 ;;
904 w89k-*)
905 cpu=hppa1.1
906 vendor=winbond
907 basic_os=proelf
908 ;;
909 none)
910 cpu=none
911 vendor=none
329912 ;;
330913 leon|leon[3-9])
331 basic_machine=sparc-$basic_machine
332 ;;
333 m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
334 basic_machine=$basic_machine-unknown
335 os=-none
336 ;;
337 m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
338 ;;
339 ms1)
340 basic_machine=mt-unknown
341 ;;
342
343 strongarm | thumb | xscale)
344 basic_machine=arm-unknown
345 ;;
346 xgate)
347 basic_machine=$basic_machine-unknown
348 os=-none
349 ;;
350 xscaleeb)
351 basic_machine=armeb-unknown
352 ;;
353
354 xscaleel)
355 basic_machine=armel-unknown
356 ;;
357
914 cpu=sparc
915 vendor=$basic_machine
916 ;;
917 leon-*|leon[3-9]-*)
918 cpu=sparc
919 vendor=`echo "$basic_machine" | sed 's/-.*//'`
920 ;;
921
922 *-*)
923 # shellcheck disable=SC2162
924 IFS="-" read cpu vendor <<EOF
925 $basic_machine
926 EOF
927 ;;
358928 # We use `pc' rather than `unknown'
359929 # because (1) that's what they normally are, and
360930 # (2) the word "unknown" tends to confuse beginning users.
361931 i*86 | x86_64)
362 basic_machine=$basic_machine-pc
363 ;;
364 # Object if more than one company name word.
365 *-*-*)
366 echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
367 exit 1
368 ;;
369 # Recognize the basic CPU types with company name.
370 580-* \
371 | a29k-* \
372 | aarch64-* | aarch64_be-* \
373 | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
374 | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
375 | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
376 | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
377 | avr-* | avr32-* \
378 | ba-* \
379 | be32-* | be64-* \
380 | bfin-* | bs2000-* \
381 | c[123]* | c30-* | [cjt]90-* | c4x-* \
382 | c8051-* | clipper-* | craynv-* | cydra-* \
383 | d10v-* | d30v-* | dlx-* \
384 | e2k-* | elxsi-* \
385 | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
386 | h8300-* | h8500-* \
387 | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
388 | hexagon-* \
389 | i*86-* | i860-* | i960-* | ia64-* \
390 | ip2k-* | iq2000-* \
391 | k1om-* \
392 | le32-* | le64-* \
393 | lm32-* \
394 | m32c-* | m32r-* | m32rle-* \
395 | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
396 | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
397 | microblaze-* | microblazeel-* \
398 | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
399 | mips16-* \
400 | mips64-* | mips64el-* \
401 | mips64octeon-* | mips64octeonel-* \
402 | mips64orion-* | mips64orionel-* \
403 | mips64r5900-* | mips64r5900el-* \
404 | mips64vr-* | mips64vrel-* \
405 | mips64vr4100-* | mips64vr4100el-* \
406 | mips64vr4300-* | mips64vr4300el-* \
407 | mips64vr5000-* | mips64vr5000el-* \
408 | mips64vr5900-* | mips64vr5900el-* \
409 | mipsisa32-* | mipsisa32el-* \
410 | mipsisa32r2-* | mipsisa32r2el-* \
411 | mipsisa32r6-* | mipsisa32r6el-* \
412 | mipsisa64-* | mipsisa64el-* \
413 | mipsisa64r2-* | mipsisa64r2el-* \
414 | mipsisa64r6-* | mipsisa64r6el-* \
415 | mipsisa64sb1-* | mipsisa64sb1el-* \
416 | mipsisa64sr71k-* | mipsisa64sr71kel-* \
417 | mipsr5900-* | mipsr5900el-* \
418 | mipstx39-* | mipstx39el-* \
419 | mmix-* \
420 | mt-* \
421 | msp430-* \
422 | nds32-* | nds32le-* | nds32be-* \
423 | nios-* | nios2-* | nios2eb-* | nios2el-* \
424 | none-* | np1-* | ns16k-* | ns32k-* \
425 | open8-* \
426 | or1k*-* \
427 | orion-* \
428 | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
429 | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
430 | pyramid-* \
431 | riscv32-* | riscv64-* \
432 | rl78-* | romp-* | rs6000-* | rx-* \
433 | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
434 | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
435 | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
436 | sparclite-* \
437 | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
438 | tahoe-* \
439 | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
440 | tile*-* \
441 | tron-* \
442 | ubicom32-* \
443 | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
444 | vax-* \
445 | visium-* \
446 | we32k-* \
447 | x86-* | x86_64-* | xc16x-* | xps100-* \
448 | xstormy16-* | xtensa*-* \
449 | ymp-* \
450 | z8k-* | z80-*)
451 ;;
452 # Recognize the basic CPU types without company name, with glob match.
453 xtensa*)
454 basic_machine=$basic_machine-unknown
455 ;;
456 # Recognize the various machine names and aliases which stand
457 # for a CPU type and a company and sometimes even an OS.
458 386bsd)
459 basic_machine=i386-unknown
460 os=-bsd
461 ;;
462 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
463 basic_machine=m68000-att
464 ;;
465 3b*)
466 basic_machine=we32k-att
467 ;;
468 a29khif)
469 basic_machine=a29k-amd
470 os=-udi
471 ;;
472 abacus)
473 basic_machine=abacus-unknown
474 ;;
475 adobe68k)
476 basic_machine=m68010-adobe
477 os=-scout
478 ;;
479 alliant | fx80)
480 basic_machine=fx80-alliant
481 ;;
482 altos | altos3068)
483 basic_machine=m68k-altos
484 ;;
485 am29k)
486 basic_machine=a29k-none
487 os=-bsd
488 ;;
489 amd64)
490 basic_machine=x86_64-pc
491 ;;
932 cpu=$basic_machine
933 vendor=pc
934 ;;
935 # These rules are duplicated from below for sake of the special case above;
936 # i.e. things that normalized to x86 arches should also default to "pc"
937 pc98)
938 cpu=i386
939 vendor=pc
940 ;;
941 x64 | amd64)
942 cpu=x86_64
943 vendor=pc
944 ;;
945 # Recognize the basic CPU types without company name.
946 *)
947 cpu=$basic_machine
948 vendor=unknown
949 ;;
950 esac
951
952 unset -v basic_machine
953
954 # Decode basic machines in the full and proper CPU-Company form.
955 case $cpu-$vendor in
956 # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
957 # some cases the only manufacturer, in others, it is the most popular.
958 craynv-unknown)
959 vendor=cray
960 basic_os=${basic_os:-unicosmp}
961 ;;
962 c90-unknown | c90-cray)
963 vendor=cray
964 basic_os=${Basic_os:-unicos}
965 ;;
966 fx80-unknown)
967 vendor=alliant
968 ;;
969 romp-unknown)
970 vendor=ibm
971 ;;
972 mmix-unknown)
973 vendor=knuth
974 ;;
975 microblaze-unknown | microblazeel-unknown)
976 vendor=xilinx
977 ;;
978 rs6000-unknown)
979 vendor=ibm
980 ;;
981 vax-unknown)
982 vendor=dec
983 ;;
984 pdp11-unknown)
985 vendor=dec
986 ;;
987 we32k-unknown)
988 vendor=att
989 ;;
990 cydra-unknown)
991 vendor=cydrome
992 ;;
993 i370-ibm*)
994 vendor=ibm
995 ;;
996 orion-unknown)
997 vendor=highlevel
998 ;;
999 xps-unknown | xps100-unknown)
1000 cpu=xps100
1001 vendor=honeywell
1002 ;;
1003
1004 # Here we normalize CPU types with a missing or matching vendor
1005 dpx20-unknown | dpx20-bull)
1006 cpu=rs6000
1007 vendor=bull
1008 basic_os=${basic_os:-bosx}
1009 ;;
1010
1011 # Here we normalize CPU types irrespective of the vendor
4921012 amd64-*)
493 basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
494 ;;
495 amdahl)
496 basic_machine=580-amdahl
497 os=-sysv
498 ;;
499 amiga | amiga-*)
500 basic_machine=m68k-unknown
501 ;;
502 amigaos | amigados)
503 basic_machine=m68k-unknown
504 os=-amigaos
505 ;;
506 amigaunix | amix)
507 basic_machine=m68k-unknown
508 os=-sysv4
509 ;;
510 apollo68)
511 basic_machine=m68k-apollo
512 os=-sysv
513 ;;
514 apollo68bsd)
515 basic_machine=m68k-apollo
516 os=-bsd
517 ;;
518 aros)
519 basic_machine=i386-pc
520 os=-aros
521 ;;
522 asmjs)
523 basic_machine=asmjs-unknown
524 ;;
525 aux)
526 basic_machine=m68k-apple
527 os=-aux
528 ;;
529 balance)
530 basic_machine=ns32k-sequent
531 os=-dynix
532 ;;
533 blackfin)
534 basic_machine=bfin-unknown
535 os=-linux
1013 cpu=x86_64
5361014 ;;
5371015 blackfin-*)
538 basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
539 os=-linux
1016 cpu=bfin
1017 basic_os=linux
1018 ;;
1019 c54x-*)
1020 cpu=tic54x
1021 ;;
1022 c55x-*)
1023 cpu=tic55x
1024 ;;
1025 c6x-*)
1026 cpu=tic6x
1027 ;;
1028 e500v[12]-*)
1029 cpu=powerpc
1030 basic_os=${basic_os}"spe"
1031 ;;
1032 mips3*-*)
1033 cpu=mips64
1034 ;;
1035 ms1-*)
1036 cpu=mt
1037 ;;
1038 m68knommu-*)
1039 cpu=m68k
1040 basic_os=linux
1041 ;;
1042 m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
1043 cpu=s12z
1044 ;;
1045 openrisc-*)
1046 cpu=or32
1047 ;;
1048 parisc-*)
1049 cpu=hppa
1050 basic_os=linux
1051 ;;
1052 pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
1053 cpu=i586
1054 ;;
1055 pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
1056 cpu=i686
1057 ;;
1058 pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
1059 cpu=i686
1060 ;;
1061 pentium4-*)
1062 cpu=i786
1063 ;;
1064 pc98-*)
1065 cpu=i386
1066 ;;
1067 ppc-* | ppcbe-*)
1068 cpu=powerpc
1069 ;;
1070 ppcle-* | powerpclittle-*)
1071 cpu=powerpcle
1072 ;;
1073 ppc64-*)
1074 cpu=powerpc64
1075 ;;
1076 ppc64le-* | powerpc64little-*)
1077 cpu=powerpc64le
1078 ;;
1079 sb1-*)
1080 cpu=mipsisa64sb1
1081 ;;
1082 sb1el-*)
1083 cpu=mipsisa64sb1el
1084 ;;
1085 sh5e[lb]-*)
1086 cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
1087 ;;
1088 spur-*)
1089 cpu=spur
1090 ;;
1091 strongarm-* | thumb-*)
1092 cpu=arm
1093 ;;
1094 tx39-*)
1095 cpu=mipstx39
1096 ;;
1097 tx39el-*)
1098 cpu=mipstx39el
1099 ;;
1100 x64-*)
1101 cpu=x86_64
1102 ;;
1103 xscale-* | xscalee[bl]-*)
1104 cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
1105 ;;
1106 arm64-*)
1107 cpu=aarch64
1108 ;;
1109
1110 # Recognize the canonical CPU Types that limit and/or modify the
1111 # company names they are paired with.
1112 cr16-*)
1113 basic_os=${basic_os:-elf}
1114 ;;
1115 crisv32-* | etraxfs*-*)
1116 cpu=crisv32
1117 vendor=axis
1118 ;;
1119 cris-* | etrax*-*)
1120 cpu=cris
1121 vendor=axis
1122 ;;
1123 crx-*)
1124 basic_os=${basic_os:-elf}
1125 ;;
1126 neo-tandem)
1127 cpu=neo
1128 vendor=tandem
1129 ;;
1130 nse-tandem)
1131 cpu=nse
1132 vendor=tandem
1133 ;;
1134 nsr-tandem)
1135 cpu=nsr
1136 vendor=tandem
1137 ;;
1138 nsv-tandem)
1139 cpu=nsv
1140 vendor=tandem
1141 ;;
1142 nsx-tandem)
1143 cpu=nsx
1144 vendor=tandem
1145 ;;
1146 mipsallegrexel-sony)
1147 cpu=mipsallegrexel
1148 vendor=sony
1149 ;;
1150 tile*-*)
1151 basic_os=${basic_os:-linux-gnu}
1152 ;;
1153
1154 *)
1155 # Recognize the canonical CPU types that are allowed with any
1156 # company name.
1157 case $cpu in
1158 1750a | 580 \
1159 | a29k \
1160 | aarch64 | aarch64_be \
1161 | abacus \
1162 | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
1163 | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
1164 | alphapca5[67] | alpha64pca5[67] \
1165 | am33_2.0 \
1166 | amdgcn \
1167 | arc | arceb \
1168 | arm | arm[lb]e | arme[lb] | armv* \
1169 | avr | avr32 \
1170 | asmjs \
1171 | ba \
1172 | be32 | be64 \
1173 | bfin | bpf | bs2000 \
1174 | c[123]* | c30 | [cjt]90 | c4x \
1175 | c8051 | clipper | craynv | csky | cydra \
1176 | d10v | d30v | dlx | dsp16xx \
1177 | e2k | elxsi | epiphany \
1178 | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
1179 | h8300 | h8500 \
1180 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
1181 | hexagon \
1182 | i370 | i*86 | i860 | i960 | ia16 | ia64 \
1183 | ip2k | iq2000 \
1184 | k1om \
1185 | le32 | le64 \
1186 | lm32 \
1187 | m32c | m32r | m32rle \
1188 | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
1189 | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
1190 | m88110 | m88k | maxq | mb | mcore | mep | metag \
1191 | microblaze | microblazeel \
1192 | mips | mipsbe | mipseb | mipsel | mipsle \
1193 | mips16 \
1194 | mips64 | mips64eb | mips64el \
1195 | mips64octeon | mips64octeonel \
1196 | mips64orion | mips64orionel \
1197 | mips64r5900 | mips64r5900el \
1198 | mips64vr | mips64vrel \
1199 | mips64vr4100 | mips64vr4100el \
1200 | mips64vr4300 | mips64vr4300el \
1201 | mips64vr5000 | mips64vr5000el \
1202 | mips64vr5900 | mips64vr5900el \
1203 | mipsisa32 | mipsisa32el \
1204 | mipsisa32r2 | mipsisa32r2el \
1205 | mipsisa32r6 | mipsisa32r6el \
1206 | mipsisa64 | mipsisa64el \
1207 | mipsisa64r2 | mipsisa64r2el \
1208 | mipsisa64r6 | mipsisa64r6el \
1209 | mipsisa64sb1 | mipsisa64sb1el \
1210 | mipsisa64sr71k | mipsisa64sr71kel \
1211 | mipsr5900 | mipsr5900el \
1212 | mipstx39 | mipstx39el \
1213 | mmix \
1214 | mn10200 | mn10300 \
1215 | moxie \
1216 | mt \
1217 | msp430 \
1218 | nds32 | nds32le | nds32be \
1219 | nfp \
1220 | nios | nios2 | nios2eb | nios2el \
1221 | none | np1 | ns16k | ns32k | nvptx \
1222 | open8 \
1223 | or1k* \
1224 | or32 \
1225 | orion \
1226 | picochip \
1227 | pdp10 | pdp11 | pj | pjl | pn | power \
1228 | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
1229 | pru \
1230 | pyramid \
1231 | riscv | riscv32 | riscv64 \
1232 | rl78 | romp | rs6000 | rx \
1233 | s390 | s390x \
1234 | score \
1235 | sh | shl \
1236 | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
1237 | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
1238 | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
1239 | sparclite \
1240 | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
1241 | spu \
1242 | tahoe \
1243 | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
1244 | tron \
1245 | ubicom32 \
1246 | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
1247 | vax \
1248 | visium \
1249 | w65 \
1250 | wasm32 | wasm64 \
1251 | we32k \
1252 | x86 | x86_64 | xc16x | xgate | xps100 \
1253 | xstormy16 | xtensa* \
1254 | ymp \
1255 | z8k | z80)
1256 ;;
1257
1258 *)
1259 echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
1260 exit 1
1261 ;;
1262 esac
1263 ;;
1264 esac
1265
1266 # Here we canonicalize certain aliases for manufacturers.
1267 case $vendor in
1268 digital*)
1269 vendor=dec
1270 ;;
1271 commodore*)
1272 vendor=cbm
1273 ;;
1274 *)
1275 ;;
1276 esac
1277
1278 # Decode manufacturer-specific aliases for certain operating systems.
1279
1280 if [ x$basic_os != x ]
1281 then
1282
1283 # First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
1284 # set os.
1285 case $basic_os in
1286 gnu/linux*)
1287 kernel=linux
1288 os=`echo $basic_os | sed -e 's|gnu/linux|gnu|'`
1289 ;;
1290 nto-qnx*)
1291 kernel=nto
1292 os=`echo $basic_os | sed -e 's|nto-qnx|qnx|'`
1293 ;;
1294 *-*)
1295 # shellcheck disable=SC2162
1296 IFS="-" read kernel os <<EOF
1297 $basic_os
1298 EOF
1299 ;;
1300 # Default OS when just kernel was specified
1301 nto*)
1302 kernel=nto
1303 os=`echo $basic_os | sed -e 's|nto|qnx|'`
1304 ;;
1305 linux*)
1306 kernel=linux
1307 os=`echo $basic_os | sed -e 's|linux|gnu|'`
1308 ;;
1309 *)
1310 kernel=
1311 os=$basic_os
1312 ;;
1313 esac
1314
1315 # Now, normalize the OS (knowing we just have one component, it's not a kernel,
1316 # etc.)
1317 case $os in
1318 # First match some system type aliases that might get confused
1319 # with valid system types.
1320 # solaris* is a basic system type, with this one exception.
1321 auroraux)
1322 os=auroraux
5401323 ;;
5411324 bluegene*)
542 basic_machine=powerpc-ibm
543 os=-cnk
544 ;;
545 c54x-*)
546 basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
547 ;;
548 c55x-*)
549 basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
550 ;;
551 c6x-*)
552 basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
553 ;;
554 c90)
555 basic_machine=c90-cray
556 os=-unicos
557 ;;
558 cegcc)
559 basic_machine=arm-unknown
560 os=-cegcc
561 ;;
562 convex-c1)
563 basic_machine=c1-convex
564 os=-bsd
565 ;;
566 convex-c2)
567 basic_machine=c2-convex
568 os=-bsd
569 ;;
570 convex-c32)
571 basic_machine=c32-convex
572 os=-bsd
573 ;;
574 convex-c34)
575 basic_machine=c34-convex
576 os=-bsd
577 ;;
578 convex-c38)
579 basic_machine=c38-convex
580 os=-bsd
581 ;;
582 cray | j90)
583 basic_machine=j90-cray
584 os=-unicos
585 ;;
586 craynv)
587 basic_machine=craynv-cray
588 os=-unicosmp
589 ;;
590 cr16 | cr16-*)
591 basic_machine=cr16-unknown
592 os=-elf
593 ;;
594 crds | unos)
595 basic_machine=m68k-crds
596 ;;
597 crisv32 | crisv32-* | etraxfs*)
598 basic_machine=crisv32-axis
599 ;;
600 cris | cris-* | etrax*)
601 basic_machine=cris-axis
602 ;;
603 crx)
604 basic_machine=crx-unknown
605 os=-elf
606 ;;
607 da30 | da30-*)
608 basic_machine=m68k-da30
609 ;;
610 decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
611 basic_machine=mips-dec
612 ;;
613 decsystem10* | dec10*)
614 basic_machine=pdp10-dec
615 os=-tops10
616 ;;
617 decsystem20* | dec20*)
618 basic_machine=pdp10-dec
619 os=-tops20
620 ;;
621 delta | 3300 | motorola-3300 | motorola-delta \
622 | 3300-motorola | delta-motorola)
623 basic_machine=m68k-motorola
624 ;;
625 delta88)
626 basic_machine=m88k-motorola
627 os=-sysv3
628 ;;
629 dicos)
630 basic_machine=i686-pc
631 os=-dicos
632 ;;
633 djgpp)
634 basic_machine=i586-pc
635 os=-msdosdjgpp
636 ;;
637 dpx20 | dpx20-*)
638 basic_machine=rs6000-bull
639 os=-bosx
640 ;;
641 dpx2* | dpx2*-bull)
642 basic_machine=m68k-bull
643 os=-sysv3
644 ;;
645 e500v[12])
646 basic_machine=powerpc-unknown
647 os=$os"spe"
648 ;;
649 e500v[12]-*)
650 basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
651 os=$os"spe"
652 ;;
653 ebmon29k)
654 basic_machine=a29k-amd
655 os=-ebmon
656 ;;
657 elxsi)
658 basic_machine=elxsi-elxsi
659 os=-bsd
660 ;;
661 encore | umax | mmax)
662 basic_machine=ns32k-encore
663 ;;
664 es1800 | OSE68k | ose68k | ose | OSE)
665 basic_machine=m68k-ericsson
666 os=-ose
667 ;;
668 fx2800)
669 basic_machine=i860-alliant
670 ;;
671 genix)
672 basic_machine=ns32k-ns
673 ;;
674 gmicro)
675 basic_machine=tron-gmicro
676 os=-sysv
677 ;;
678 go32)
679 basic_machine=i386-pc
680 os=-go32
681 ;;
682 h3050r* | hiux*)
683 basic_machine=hppa1.1-hitachi
684 os=-hiuxwe2
685 ;;
686 h8300hms)
687 basic_machine=h8300-hitachi
688 os=-hms
689 ;;
690 h8300xray)
691 basic_machine=h8300-hitachi
692 os=-xray
693 ;;
694 h8500hms)
695 basic_machine=h8500-hitachi
696 os=-hms
697 ;;
698 harris)
699 basic_machine=m88k-harris
700 os=-sysv3
701 ;;
702 hp300-*)
703 basic_machine=m68k-hp
704 ;;
705 hp300bsd)
706 basic_machine=m68k-hp
707 os=-bsd
708 ;;
709 hp300hpux)
710 basic_machine=m68k-hp
711 os=-hpux
712 ;;
713 hp3k9[0-9][0-9] | hp9[0-9][0-9])
714 basic_machine=hppa1.0-hp
715 ;;
716 hp9k2[0-9][0-9] | hp9k31[0-9])
717 basic_machine=m68000-hp
718 ;;
719 hp9k3[2-9][0-9])
720 basic_machine=m68k-hp
721 ;;
722 hp9k6[0-9][0-9] | hp6[0-9][0-9])
723 basic_machine=hppa1.0-hp
724 ;;
725 hp9k7[0-79][0-9] | hp7[0-79][0-9])
726 basic_machine=hppa1.1-hp
727 ;;
728 hp9k78[0-9] | hp78[0-9])
729 # FIXME: really hppa2.0-hp
730 basic_machine=hppa1.1-hp
731 ;;
732 hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
733 # FIXME: really hppa2.0-hp
734 basic_machine=hppa1.1-hp
735 ;;
736 hp9k8[0-9][13679] | hp8[0-9][13679])
737 basic_machine=hppa1.1-hp
738 ;;
739 hp9k8[0-9][0-9] | hp8[0-9][0-9])
740 basic_machine=hppa1.0-hp
741 ;;
742 hppa-next)
743 os=-nextstep3
744 ;;
745 hppaosf)
746 basic_machine=hppa1.1-hp
747 os=-osf
748 ;;
749 hppro)
750 basic_machine=hppa1.1-hp
751 os=-proelf
752 ;;
753 i370-ibm* | ibm*)
754 basic_machine=i370-ibm
755 ;;
756 i*86v32)
757 basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
758 os=-sysv32
759 ;;
760 i*86v4*)
761 basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
762 os=-sysv4
763 ;;
764 i*86v)
765 basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
766 os=-sysv
767 ;;
768 i*86sol2)
769 basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
770 os=-solaris2
771 ;;
772 i386mach)
773 basic_machine=i386-mach
774 os=-mach
775 ;;
776 i386-vsta | vsta)
777 basic_machine=i386-unknown
778 os=-vsta
779 ;;
780 iris | iris4d)
781 basic_machine=mips-sgi
782 case $os in
783 -irix*)
1325 os=cnk
1326 ;;
1327 solaris1 | solaris1.*)
1328 os=`echo $os | sed -e 's|solaris1|sunos4|'`
1329 ;;
1330 solaris)
1331 os=solaris2
1332 ;;
1333 unixware*)
1334 os=sysv4.2uw
1335 ;;
1336 # es1800 is here to avoid being matched by es* (a different OS)
1337 es1800*)
1338 os=ose
1339 ;;
1340 # Some version numbers need modification
1341 chorusos*)
1342 os=chorusos
1343 ;;
1344 isc)
1345 os=isc2.2
1346 ;;
1347 sco6)
1348 os=sco5v6
1349 ;;
1350 sco5)
1351 os=sco3.2v5
1352 ;;
1353 sco4)
1354 os=sco3.2v4
1355 ;;
1356 sco3.2.[4-9]*)
1357 os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
1358 ;;
1359 sco*v* | scout)
1360 # Don't match below
1361 ;;
1362 sco*)
1363 os=sco3.2v2
1364 ;;
1365 psos*)
1366 os=psos
1367 ;;
1368 qnx*)
1369 case $cpu in
1370 x86 | i*86)
7841371 ;;
7851372 *)
786 os=-irix4
1373 os=nto-$os
7871374 ;;
7881375 esac
7891376 ;;
790 isi68 | isi)
791 basic_machine=m68k-isi
792 os=-sysv
793 ;;
794 leon-*|leon[3-9]-*)
795 basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
796 ;;
797 m68knommu)
798 basic_machine=m68k-unknown
799 os=-linux
800 ;;
801 m68knommu-*)
802 basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
803 os=-linux
804 ;;
805 m88k-omron*)
806 basic_machine=m88k-omron
807 ;;
808 magnum | m3230)
809 basic_machine=mips-mips
810 os=-sysv
811 ;;
812 merlin)
813 basic_machine=ns32k-utek
814 os=-sysv
815 ;;
816 microblaze*)
817 basic_machine=microblaze-xilinx
818 ;;
819 mingw64)
820 basic_machine=x86_64-pc
821 os=-mingw64
822 ;;
823 mingw32)
824 basic_machine=i686-pc
825 os=-mingw32
826 ;;
827 mingw32ce)
828 basic_machine=arm-unknown
829 os=-mingw32ce
830 ;;
831 miniframe)
832 basic_machine=m68000-convergent
833 ;;
834 *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
835 basic_machine=m68k-atari
836 os=-mint
837 ;;
838 mips3*-*)
839 basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
840 ;;
841 mips3*)
842 basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
843 ;;
844 monitor)
845 basic_machine=m68k-rom68k
846 os=-coff
847 ;;
848 morphos)
849 basic_machine=powerpc-unknown
850 os=-morphos
851 ;;
852 moxiebox)
853 basic_machine=moxie-unknown
854 os=-moxiebox
855 ;;
856 msdos)
857 basic_machine=i386-pc
858 os=-msdos
859 ;;
860 ms1-*)
861 basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
862 ;;
863 msys)
864 basic_machine=i686-pc
865 os=-msys
866 ;;
867 mvs)
868 basic_machine=i370-ibm
869 os=-mvs
870 ;;
871 nacl)
872 basic_machine=le32-unknown
873 os=-nacl
874 ;;
875 ncr3000)
876 basic_machine=i486-ncr
877 os=-sysv4
878 ;;
879 netbsd386)
880 basic_machine=i386-unknown
881 os=-netbsd
882 ;;
883 netwinder)
884 basic_machine=armv4l-rebel
885 os=-linux
886 ;;
887 news | news700 | news800 | news900)
888 basic_machine=m68k-sony
889 os=-newsos
890 ;;
891 news1000)
892 basic_machine=m68030-sony
893 os=-newsos
894 ;;
895 news-3600 | risc-news)
896 basic_machine=mips-sony
897 os=-newsos
898 ;;
899 necv70)
900 basic_machine=v70-nec
901 os=-sysv
902 ;;
903 next | m*-next )
904 basic_machine=m68k-next
905 case $os in
906 -nextstep* )
907 ;;
908 -ns2*)
909 os=-nextstep2
1377 hiux*)
1378 os=hiuxwe2
1379 ;;
1380 lynx*178)
1381 os=lynxos178
1382 ;;
1383 lynx*5)
1384 os=lynxos5
1385 ;;
1386 lynxos*)
1387 # don't get caught up in next wildcard
1388 ;;
1389 lynx*)
1390 os=lynxos
1391 ;;
1392 mac[0-9]*)
1393 os=`echo "$os" | sed -e 's|mac|macos|'`
1394 ;;
1395 opened*)
1396 os=openedition
1397 ;;
1398 os400*)
1399 os=os400
1400 ;;
1401 sunos5*)
1402 os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
1403 ;;
1404 sunos6*)
1405 os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
1406 ;;
1407 wince*)
1408 os=wince
1409 ;;
1410 utek*)
1411 os=bsd
1412 ;;
1413 dynix*)
1414 os=bsd
1415 ;;
1416 acis*)
1417 os=aos
1418 ;;
1419 atheos*)
1420 os=atheos
1421 ;;
1422 syllable*)
1423 os=syllable
1424 ;;
1425 386bsd)
1426 os=bsd
1427 ;;
1428 ctix* | uts*)
1429 os=sysv
1430 ;;
1431 nova*)
1432 os=rtmk-nova
1433 ;;
1434 ns2)
1435 os=nextstep2
1436 ;;
1437 # Preserve the version number of sinix5.
1438 sinix5.*)
1439 os=`echo $os | sed -e 's|sinix|sysv|'`
1440 ;;
1441 sinix*)
1442 os=sysv4
1443 ;;
1444 tpf*)
1445 os=tpf
1446 ;;
1447 triton*)
1448 os=sysv3
1449 ;;
1450 oss*)
1451 os=sysv3
1452 ;;
1453 svr4*)
1454 os=sysv4
1455 ;;
1456 svr3)
1457 os=sysv3
1458 ;;
1459 sysvr4)
1460 os=sysv4
1461 ;;
1462 ose*)
1463 os=ose
1464 ;;
1465 *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
1466 os=mint
1467 ;;
1468 dicos*)
1469 os=dicos
1470 ;;
1471 pikeos*)
1472 # Until real need of OS specific support for
1473 # particular features comes up, bare metal
1474 # configurations are quite functional.
1475 case $cpu in
1476 arm*)
1477 os=eabi
9101478 ;;
9111479 *)
912 os=-nextstep3
1480 os=elf
9131481 ;;
9141482 esac
9151483 ;;
916 nh3000)
917 basic_machine=m68k-harris
918 os=-cxux
919 ;;
920 nh[45]000)
921 basic_machine=m88k-harris
922 os=-cxux
923 ;;
924 nindy960)
925 basic_machine=i960-intel
926 os=-nindy
927 ;;
928 mon960)
929 basic_machine=i960-intel
930 os=-mon960
931 ;;
932 nonstopux)
933 basic_machine=mips-compaq
934 os=-nonstopux
935 ;;
936 np1)
937 basic_machine=np1-gould
938 ;;
939 neo-tandem)
940 basic_machine=neo-tandem
941 ;;
942 nse-tandem)
943 basic_machine=nse-tandem
944 ;;
945 nsr-tandem)
946 basic_machine=nsr-tandem
947 ;;
948 op50n-* | op60c-*)
949 basic_machine=hppa1.1-oki
950 os=-proelf
951 ;;
952 openrisc | openrisc-*)
953 basic_machine=or32-unknown
954 ;;
955 os400)
956 basic_machine=powerpc-ibm
957 os=-os400
958 ;;
959 OSE68000 | ose68000)
960 basic_machine=m68000-ericsson
961 os=-ose
962 ;;
963 os68k)
964 basic_machine=m68k-none
965 os=-os68k
966 ;;
967 pa-hitachi)
968 basic_machine=hppa1.1-hitachi
969 os=-hiuxwe2
970 ;;
971 paragon)
972 basic_machine=i860-intel
973 os=-osf
974 ;;
975 parisc)
976 basic_machine=hppa-unknown
977 os=-linux
978 ;;
979 parisc-*)
980 basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
981 os=-linux
982 ;;
983 pbd)
984 basic_machine=sparc-tti
985 ;;
986 pbb)
987 basic_machine=m68k-tti
988 ;;
989 pc532 | pc532-*)
990 basic_machine=ns32k-pc532
991 ;;
992 pc98)
993 basic_machine=i386-pc
994 ;;
995 pc98-*)
996 basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
997 ;;
998 pentium | p5 | k5 | k6 | nexgen | viac3)
999 basic_machine=i586-pc
1000 ;;
1001 pentiumpro | p6 | 6x86 | athlon | athlon_*)
1002 basic_machine=i686-pc
1003 ;;
1004 pentiumii | pentium2 | pentiumiii | pentium3)
1005 basic_machine=i686-pc
1006 ;;
1007 pentium4)
1008 basic_machine=i786-pc
1009 ;;
1010 pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
1011 basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
1012 ;;
1013 pentiumpro-* | p6-* | 6x86-* | athlon-*)
1014 basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
1015 ;;
1016 pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
1017 basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
1018 ;;
1019 pentium4-*)
1020 basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
1021 ;;
1022 pn)
1023 basic_machine=pn-gould
1024 ;;
1025 power) basic_machine=power-ibm
1026 ;;
1027 ppc | ppcbe) basic_machine=powerpc-unknown
1028 ;;
1029 ppc-* | ppcbe-*)
1030 basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
1031 ;;
1032 ppcle | powerpclittle)
1033 basic_machine=powerpcle-unknown
1034 ;;
1035 ppcle-* | powerpclittle-*)
1036 basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
1037 ;;
1038 ppc64) basic_machine=powerpc64-unknown
1039 ;;
1040 ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
1041 ;;
1042 ppc64le | powerpc64little)
1043 basic_machine=powerpc64le-unknown
1044 ;;
1045 ppc64le-* | powerpc64little-*)
1046 basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
1047 ;;
1048 ps2)
1049 basic_machine=i386-ibm
1050 ;;
1051 pw32)
1052 basic_machine=i586-unknown
1053 os=-pw32
1054 ;;
1055 rdos | rdos64)
1056 basic_machine=x86_64-pc
1057 os=-rdos
1058 ;;
1059 rdos32)
1060 basic_machine=i386-pc
1061 os=-rdos
1062 ;;
1063 rom68k)
1064 basic_machine=m68k-rom68k
1065 os=-coff
1066 ;;
1067 rm[46]00)
1068 basic_machine=mips-siemens
1069 ;;
1070 rtpc | rtpc-*)
1071 basic_machine=romp-ibm
1072 ;;
1073 s390 | s390-*)
1074 basic_machine=s390-ibm
1075 ;;
1076 s390x | s390x-*)
1077 basic_machine=s390x-ibm
1078 ;;
1079 sa29200)
1080 basic_machine=a29k-amd
1081 os=-udi
1082 ;;
1083 sb1)
1084 basic_machine=mipsisa64sb1-unknown
1085 ;;
1086 sb1el)
1087 basic_machine=mipsisa64sb1el-unknown
1088 ;;
1089 sde)
1090 basic_machine=mipsisa32-sde
1091 os=-elf
1092 ;;
1093 sei)
1094 basic_machine=mips-sei
1095 os=-seiux
1096 ;;
1097 sequent)
1098 basic_machine=i386-sequent
1099 ;;
1100 sh)
1101 basic_machine=sh-hitachi
1102 os=-hms
1103 ;;
1104 sh5el)
1105 basic_machine=sh5le-unknown
1106 ;;
1107 sh64)
1108 basic_machine=sh64-unknown
1109 ;;
1110 sparclite-wrs | simso-wrs)
1111 basic_machine=sparclite-wrs
1112 os=-vxworks
1113 ;;
1114 sps7)
1115 basic_machine=m68k-bull
1116 os=-sysv2
1117 ;;
1118 spur)
1119 basic_machine=spur-unknown
1120 ;;
1121 st2000)
1122 basic_machine=m68k-tandem
1123 ;;
1124 stratus)
1125 basic_machine=i860-stratus
1126 os=-sysv4
1127 ;;
1128 strongarm-* | thumb-*)
1129 basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
1130 ;;
1131 sun2)
1132 basic_machine=m68000-sun
1133 ;;
1134 sun2os3)
1135 basic_machine=m68000-sun
1136 os=-sunos3
1137 ;;
1138 sun2os4)
1139 basic_machine=m68000-sun
1140 os=-sunos4
1141 ;;
1142 sun3os3)
1143 basic_machine=m68k-sun
1144 os=-sunos3
1145 ;;
1146 sun3os4)
1147 basic_machine=m68k-sun
1148 os=-sunos4
1149 ;;
1150 sun4os3)
1151 basic_machine=sparc-sun
1152 os=-sunos3
1153 ;;
1154 sun4os4)
1155 basic_machine=sparc-sun
1156 os=-sunos4
1157 ;;
1158 sun4sol2)
1159 basic_machine=sparc-sun
1160 os=-solaris2
1161 ;;
1162 sun3 | sun3-*)
1163 basic_machine=m68k-sun
1164 ;;
1165 sun4)
1166 basic_machine=sparc-sun
1167 ;;
1168 sun386 | sun386i | roadrunner)
1169 basic_machine=i386-sun
1170 ;;
1171 sv1)
1172 basic_machine=sv1-cray
1173 os=-unicos
1174 ;;
1175 symmetry)
1176 basic_machine=i386-sequent
1177 os=-dynix
1178 ;;
1179 t3e)
1180 basic_machine=alphaev5-cray
1181 os=-unicos
1182 ;;
1183 t90)
1184 basic_machine=t90-cray
1185 os=-unicos
1186 ;;
1187 tile*)
1188 basic_machine=$basic_machine-unknown
1189 os=-linux-gnu
1190 ;;
1191 tx39)
1192 basic_machine=mipstx39-unknown
1193 ;;
1194 tx39el)
1195 basic_machine=mipstx39el-unknown
1196 ;;
1197 toad1)
1198 basic_machine=pdp10-xkl
1199 os=-tops20
1200 ;;
1201 tower | tower-32)
1202 basic_machine=m68k-ncr
1203 ;;
1204 tpf)
1205 basic_machine=s390x-ibm
1206 os=-tpf
1207 ;;
1208 udi29k)
1209 basic_machine=a29k-amd
1210 os=-udi
1211 ;;
1212 ultra3)
1213 basic_machine=a29k-nyu
1214 os=-sym1
1215 ;;
1216 v810 | necv810)
1217 basic_machine=v810-nec
1218 os=-none
1219 ;;
1220 vaxv)
1221 basic_machine=vax-dec
1222 os=-sysv
1223 ;;
1224 vms)
1225 basic_machine=vax-dec
1226 os=-vms
1227 ;;
1228 vpp*|vx|vx-*)
1229 basic_machine=f301-fujitsu
1230 ;;
1231 vxworks960)
1232 basic_machine=i960-wrs
1233 os=-vxworks
1234 ;;
1235 vxworks68)
1236 basic_machine=m68k-wrs
1237 os=-vxworks
1238 ;;
1239 vxworks29k)
1240 basic_machine=a29k-wrs
1241 os=-vxworks
1242 ;;
1243 w65*)
1244 basic_machine=w65-wdc
1245 os=-none
1246 ;;
1247 w89k-*)
1248 basic_machine=hppa1.1-winbond
1249 os=-proelf
1250 ;;
1251 xbox)
1252 basic_machine=i686-pc
1253 os=-mingw32
1254 ;;
1255 xps | xps100)
1256 basic_machine=xps100-honeywell
1257 ;;
1258 xscale-* | xscalee[bl]-*)
1259 basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
1260 ;;
1261 ymp)
1262 basic_machine=ymp-cray
1263 os=-unicos
1264 ;;
1265 z8k-*-coff)
1266 basic_machine=z8k-unknown
1267 os=-sim
1268 ;;
1269 z80-*-coff)
1270 basic_machine=z80-unknown
1271 os=-sim
1272 ;;
1273 none)
1274 basic_machine=none-none
1275 os=-none
1276 ;;
1277
1278 # Here we handle the default manufacturer of certain CPU types. It is in
1279 # some cases the only manufacturer, in others, it is the most popular.
1280 w89k)
1281 basic_machine=hppa1.1-winbond
1282 ;;
1283 op50n)
1284 basic_machine=hppa1.1-oki
1285 ;;
1286 op60c)
1287 basic_machine=hppa1.1-oki
1288 ;;
1289 romp)
1290 basic_machine=romp-ibm
1291 ;;
1292 mmix)
1293 basic_machine=mmix-knuth
1294 ;;
1295 rs6000)
1296 basic_machine=rs6000-ibm
1297 ;;
1298 vax)
1299 basic_machine=vax-dec
1300 ;;
1301 pdp10)
1302 # there are many clones, so DEC is not a safe bet
1303 basic_machine=pdp10-unknown
1304 ;;
1305 pdp11)
1306 basic_machine=pdp11-dec
1307 ;;
1308 we32k)
1309 basic_machine=we32k-att
1310 ;;
1311 sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
1312 basic_machine=sh-unknown
1313 ;;
1314 sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
1315 basic_machine=sparc-sun
1316 ;;
1317 cydra)
1318 basic_machine=cydra-cydrome
1319 ;;
1320 orion)
1321 basic_machine=orion-highlevel
1322 ;;
1323 orion105)
1324 basic_machine=clipper-highlevel
1325 ;;
1326 mac | mpw | mac-mpw)
1327 basic_machine=m68k-apple
1328 ;;
1329 pmac | pmac-mpw)
1330 basic_machine=powerpc-apple
1331 ;;
1332 *-unknown)
1333 # Make sure to match an already-canonicalized machine name.
1334 ;;
13351484 *)
1336 echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
1337 exit 1
1485 # No normalization, but not necessarily accepted, that comes below.
13381486 ;;
13391487 esac
13401488
1341 # Here we canonicalize certain aliases for manufacturers.
1342 case $basic_machine in
1343 *-digital*)
1344 basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
1345 ;;
1346 *-commodore*)
1347 basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
1348 ;;
1349 *)
1350 ;;
1351 esac
1352
1353 # Decode manufacturer-specific aliases for certain operating systems.
1354
1355 if [ x"$os" != x"" ]
1356 then
1357 case $os in
1358 # First match some system type aliases
1359 # that might get confused with valid system types.
1360 # -solaris* is a basic system type, with this one exception.
1361 -auroraux)
1362 os=-auroraux
1363 ;;
1364 -solaris1 | -solaris1.*)
1365 os=`echo $os | sed -e 's|solaris1|sunos4|'`
1366 ;;
1367 -solaris)
1368 os=-solaris2
1369 ;;
1370 -svr4*)
1371 os=-sysv4
1372 ;;
1373 -unixware*)
1374 os=-sysv4.2uw
1375 ;;
1376 -gnu/linux*)
1377 os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
1378 ;;
1379 # First accept the basic system types.
1380 # The portable systems comes first.
1381 # Each alternative MUST END IN A *, to match a version number.
1382 # -sysv* is not here because it comes later, after sysvr4.
1383 -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
1384 | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
1385 | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
1386 | -sym* | -kopensolaris* | -plan9* \
1387 | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
1388 | -aos* | -aros* | -cloudabi* | -sortix* \
1389 | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
1390 | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
1391 | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
1392 | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
1393 | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
1394 | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
1395 | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
1396 | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
1397 | -chorusos* | -chorusrdb* | -cegcc* \
1398 | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
1399 | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
1400 | -linux-newlib* | -linux-musl* | -linux-uclibc* \
1401 | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
1402 | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
1403 | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
1404 | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
1405 | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
1406 | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
1407 | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
1408 | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
1409 | -onefs* | -tirtos* | -phoenix*)
1410 # Remember, each alternative MUST END IN *, to match a version number.
1411 ;;
1412 -qnx*)
1413 case $basic_machine in
1414 x86-* | i*86-*)
1415 ;;
1416 *)
1417 os=-nto$os
1418 ;;
1419 esac
1420 ;;
1421 -nto-qnx*)
1422 ;;
1423 -nto*)
1424 os=`echo $os | sed -e 's|nto|nto-qnx|'`
1425 ;;
1426 -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
1427 | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
1428 | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
1429 ;;
1430 -mac*)
1431 os=`echo $os | sed -e 's|mac|macos|'`
1432 ;;
1433 -linux-dietlibc)
1434 os=-linux-dietlibc
1435 ;;
1436 -linux*)
1437 os=`echo $os | sed -e 's|linux|linux-gnu|'`
1438 ;;
1439 -sunos5*)
1440 os=`echo $os | sed -e 's|sunos5|solaris2|'`
1441 ;;
1442 -sunos6*)
1443 os=`echo $os | sed -e 's|sunos6|solaris3|'`
1444 ;;
1445 -opened*)
1446 os=-openedition
1447 ;;
1448 -os400*)
1449 os=-os400
1450 ;;
1451 -wince*)
1452 os=-wince
1453 ;;
1454 -osfrose*)
1455 os=-osfrose
1456 ;;
1457 -osf*)
1458 os=-osf
1459 ;;
1460 -utek*)
1461 os=-bsd
1462 ;;
1463 -dynix*)
1464 os=-bsd
1465 ;;
1466 -acis*)
1467 os=-aos
1468 ;;
1469 -atheos*)
1470 os=-atheos
1471 ;;
1472 -syllable*)
1473 os=-syllable
1474 ;;
1475 -386bsd)
1476 os=-bsd
1477 ;;
1478 -ctix* | -uts*)
1479 os=-sysv
1480 ;;
1481 -nova*)
1482 os=-rtmk-nova
1483 ;;
1484 -ns2 )
1485 os=-nextstep2
1486 ;;
1487 -nsk*)
1488 os=-nsk
1489 ;;
1490 # Preserve the version number of sinix5.
1491 -sinix5.*)
1492 os=`echo $os | sed -e 's|sinix|sysv|'`
1493 ;;
1494 -sinix*)
1495 os=-sysv4
1496 ;;
1497 -tpf*)
1498 os=-tpf
1499 ;;
1500 -triton*)
1501 os=-sysv3
1502 ;;
1503 -oss*)
1504 os=-sysv3
1505 ;;
1506 -svr4)
1507 os=-sysv4
1508 ;;
1509 -svr3)
1510 os=-sysv3
1511 ;;
1512 -sysvr4)
1513 os=-sysv4
1514 ;;
1515 # This must come after -sysvr4.
1516 -sysv*)
1517 ;;
1518 -ose*)
1519 os=-ose
1520 ;;
1521 -es1800*)
1522 os=-ose
1523 ;;
1524 -xenix)
1525 os=-xenix
1526 ;;
1527 -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
1528 os=-mint
1529 ;;
1530 -aros*)
1531 os=-aros
1532 ;;
1533 -zvmoe)
1534 os=-zvmoe
1535 ;;
1536 -dicos*)
1537 os=-dicos
1538 ;;
1539 -nacl*)
1540 ;;
1541 -ios)
1542 ;;
1543 -none)
1544 ;;
1545 *)
1546 # Get rid of the `-' at the beginning of $os.
1547 os=`echo $os | sed 's/[^-]*-//'`
1548 echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
1549 exit 1
1550 ;;
1551 esac
15521489 else
15531490
15541491 # Here we handle the default operating systems that come with various machines.
15611498 # will signal an error saying that MANUFACTURER isn't an operating
15621499 # system, and we'll never get to this point.
15631500
1564 case $basic_machine in
1501 kernel=
1502 case $cpu-$vendor in
15651503 score-*)
1566 os=-elf
1504 os=elf
15671505 ;;
15681506 spu-*)
1569 os=-elf
1507 os=elf
15701508 ;;
15711509 *-acorn)
1572 os=-riscix1.2
1510 os=riscix1.2
15731511 ;;
15741512 arm*-rebel)
1575 os=-linux
1513 kernel=linux
1514 os=gnu
15761515 ;;
15771516 arm*-semi)
1578 os=-aout
1517 os=aout
15791518 ;;
15801519 c4x-* | tic4x-*)
1581 os=-coff
1520 os=coff
15821521 ;;
15831522 c8051-*)
1584 os=-elf
1523 os=elf
1524 ;;
1525 clipper-intergraph)
1526 os=clix
15851527 ;;
15861528 hexagon-*)
1587 os=-elf
1529 os=elf
15881530 ;;
15891531 tic54x-*)
1590 os=-coff
1532 os=coff
15911533 ;;
15921534 tic55x-*)
1593 os=-coff
1535 os=coff
15941536 ;;
15951537 tic6x-*)
1596 os=-coff
1538 os=coff
15971539 ;;
15981540 # This must come before the *-dec entry.
15991541 pdp10-*)
1600 os=-tops20
1542 os=tops20
16011543 ;;
16021544 pdp11-*)
1603 os=-none
1545 os=none
16041546 ;;
16051547 *-dec | vax-*)
1606 os=-ultrix4.2
1548 os=ultrix4.2
16071549 ;;
16081550 m68*-apollo)
1609 os=-domain
1551 os=domain
16101552 ;;
16111553 i386-sun)
1612 os=-sunos4.0.2
1554 os=sunos4.0.2
16131555 ;;
16141556 m68000-sun)
1615 os=-sunos3
1557 os=sunos3
16161558 ;;
16171559 m68*-cisco)
1618 os=-aout
1560 os=aout
16191561 ;;
16201562 mep-*)
1621 os=-elf
1563 os=elf
16221564 ;;
16231565 mips*-cisco)
1624 os=-elf
1566 os=elf
16251567 ;;
16261568 mips*-*)
1627 os=-elf
1569 os=elf
16281570 ;;
16291571 or32-*)
1630 os=-coff
1572 os=coff
16311573 ;;
16321574 *-tti) # must be before sparc entry or we get the wrong os.
1633 os=-sysv3
1575 os=sysv3
16341576 ;;
16351577 sparc-* | *-sun)
1636 os=-sunos4.1.1
1578 os=sunos4.1.1
1579 ;;
1580 pru-*)
1581 os=elf
16371582 ;;
16381583 *-be)
1639 os=-beos
1640 ;;
1641 *-haiku)
1642 os=-haiku
1584 os=beos
16431585 ;;
16441586 *-ibm)
1645 os=-aix
1587 os=aix
16461588 ;;
16471589 *-knuth)
1648 os=-mmixware
1590 os=mmixware
16491591 ;;
16501592 *-wec)
1651 os=-proelf
1593 os=proelf
16521594 ;;
16531595 *-winbond)
1654 os=-proelf
1596 os=proelf
16551597 ;;
16561598 *-oki)
1657 os=-proelf
1599 os=proelf
16581600 ;;
16591601 *-hp)
1660 os=-hpux
1602 os=hpux
16611603 ;;
16621604 *-hitachi)
1663 os=-hiux
1605 os=hiux
16641606 ;;
16651607 i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
1666 os=-sysv
1608 os=sysv
16671609 ;;
16681610 *-cbm)
1669 os=-amigaos
1611 os=amigaos
16701612 ;;
16711613 *-dg)
1672 os=-dgux
1614 os=dgux
16731615 ;;
16741616 *-dolphin)
1675 os=-sysv3
1617 os=sysv3
16761618 ;;
16771619 m68k-ccur)
1678 os=-rtu
1620 os=rtu
16791621 ;;
16801622 m88k-omron*)
1681 os=-luna
1682 ;;
1683 *-next )
1684 os=-nextstep
1623 os=luna
1624 ;;
1625 *-next)
1626 os=nextstep
16851627 ;;
16861628 *-sequent)
1687 os=-ptx
1629 os=ptx
16881630 ;;
16891631 *-crds)
1690 os=-unos
1632 os=unos
16911633 ;;
16921634 *-ns)
1693 os=-genix
1635 os=genix
16941636 ;;
16951637 i370-*)
1696 os=-mvs
1697 ;;
1698 *-next)
1699 os=-nextstep3
1638 os=mvs
17001639 ;;
17011640 *-gould)
1702 os=-sysv
1641 os=sysv
17031642 ;;
17041643 *-highlevel)
1705 os=-bsd
1644 os=bsd
17061645 ;;
17071646 *-encore)
1708 os=-bsd
1647 os=bsd
17091648 ;;
17101649 *-sgi)
1711 os=-irix
1650 os=irix
17121651 ;;
17131652 *-siemens)
1714 os=-sysv4
1653 os=sysv4
17151654 ;;
17161655 *-masscomp)
1717 os=-rtu
1656 os=rtu
17181657 ;;
17191658 f30[01]-fujitsu | f700-fujitsu)
1720 os=-uxpv
1659 os=uxpv
17211660 ;;
17221661 *-rom68k)
1723 os=-coff
1662 os=coff
17241663 ;;
17251664 *-*bug)
1726 os=-coff
1665 os=coff
17271666 ;;
17281667 *-apple)
1729 os=-macos
1668 os=macos
17301669 ;;
17311670 *-atari*)
1732 os=-mint
1671 os=mint
1672 ;;
1673 *-wrs)
1674 os=vxworks
17331675 ;;
17341676 *)
1735 os=-none
1677 os=none
17361678 ;;
17371679 esac
1680
17381681 fi
1682
1683 # Now, validate our (potentially fixed-up) OS.
1684 case $os in
1685 # Sometimes we do "kernel-abi", so those need to count as OSes.
1686 musl* | newlib* | uclibc*)
1687 ;;
1688 # Likewise for "kernel-libc"
1689 eabi | eabihf | gnueabi | gnueabihf)
1690 ;;
1691 # Now accept the basic system types.
1692 # The portable systems comes first.
1693 # Each alternative MUST end in a * to match a version number.
1694 gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
1695 | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
1696 | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
1697 | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
1698 | hiux* | abug | nacl* | netware* | windows* \
1699 | os9* | macos* | osx* | ios* \
1700 | mpw* | magic* | mmixware* | mon960* | lnews* \
1701 | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
1702 | aos* | aros* | cloudabi* | sortix* | twizzler* \
1703 | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
1704 | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
1705 | mirbsd* | netbsd* | dicos* | openedition* | ose* \
1706 | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
1707 | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
1708 | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
1709 | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
1710 | udi* | lites* | ieee* | go32* | aux* | hcos* \
1711 | chorusrdb* | cegcc* | glidix* \
1712 | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
1713 | midipix* | mingw32* | mingw64* | mint* \
1714 | uxpv* | beos* | mpeix* | udk* | moxiebox* \
1715 | interix* | uwin* | mks* | rhapsody* | darwin* \
1716 | openstep* | oskit* | conix* | pw32* | nonstopux* \
1717 | storm-chaos* | tops10* | tenex* | tops20* | its* \
1718 | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
1719 | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
1720 | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
1721 | skyos* | haiku* | rdos* | toppers* | drops* | es* \
1722 | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
1723 | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
1724 | nsk* | powerunix* | genode* | zvmoe* )
1725 ;;
1726 # This one is extra strict with allowed versions
1727 sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
1728 # Don't forget version if it is 3.2v4 or newer.
1729 ;;
1730 none)
1731 ;;
1732 *)
1733 echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
1734 exit 1
1735 ;;
1736 esac
1737
1738 # As a final step for OS-related things, validate the OS-kernel combination
1739 # (given a valid OS), if there is a kernel.
1740 case $kernel-$os in
1741 linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
1742 ;;
1743 -dietlibc* | -newlib* | -musl* | -uclibc* )
1744 # These are just libc implementations, not actual OSes, and thus
1745 # require a kernel.
1746 echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
1747 exit 1
1748 ;;
1749 kfreebsd*-gnu* | kopensolaris*-gnu*)
1750 ;;
1751 nto-qnx*)
1752 ;;
1753 *-eabi* | *-gnueabi*)
1754 ;;
1755 -*)
1756 # Blank kernel with real OS is always fine.
1757 ;;
1758 *-*)
1759 echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
1760 exit 1
1761 ;;
1762 esac
17391763
17401764 # Here we handle the case where we know the os, and the CPU type, but not the
17411765 # manufacturer. We pick the logical manufacturer.
1742 vendor=unknown
1743 case $basic_machine in
1744 *-unknown)
1745 case $os in
1746 -riscix*)
1766 case $vendor in
1767 unknown)
1768 case $cpu-$os in
1769 *-riscix*)
17471770 vendor=acorn
17481771 ;;
1749 -sunos*)
1772 *-sunos*)
17501773 vendor=sun
17511774 ;;
1752 -cnk*|-aix*)
1775 *-cnk* | *-aix*)
17531776 vendor=ibm
17541777 ;;
1755 -beos*)
1778 *-beos*)
17561779 vendor=be
17571780 ;;
1758 -hpux*)
1781 *-hpux*)
17591782 vendor=hp
17601783 ;;
1761 -mpeix*)
1784 *-mpeix*)
17621785 vendor=hp
17631786 ;;
1764 -hiux*)
1787 *-hiux*)
17651788 vendor=hitachi
17661789 ;;
1767 -unos*)
1790 *-unos*)
17681791 vendor=crds
17691792 ;;
1770 -dgux*)
1793 *-dgux*)
17711794 vendor=dg
17721795 ;;
1773 -luna*)
1796 *-luna*)
17741797 vendor=omron
17751798 ;;
1776 -genix*)
1799 *-genix*)
17771800 vendor=ns
17781801 ;;
1779 -mvs* | -opened*)
1802 *-clix*)
1803 vendor=intergraph
1804 ;;
1805 *-mvs* | *-opened*)
17801806 vendor=ibm
17811807 ;;
1782 -os400*)
1808 *-os400*)
17831809 vendor=ibm
17841810 ;;
1785 -ptx*)
1811 s390-* | s390x-*)
1812 vendor=ibm
1813 ;;
1814 *-ptx*)
17861815 vendor=sequent
17871816 ;;
1788 -tpf*)
1817 *-tpf*)
17891818 vendor=ibm
17901819 ;;
1791 -vxsim* | -vxworks* | -windiss*)
1820 *-vxsim* | *-vxworks* | *-windiss*)
17921821 vendor=wrs
17931822 ;;
1794 -aux*)
1823 *-aux*)
17951824 vendor=apple
17961825 ;;
1797 -hms*)
1826 *-hms*)
17981827 vendor=hitachi
17991828 ;;
1800 -mpw* | -macos*)
1829 *-mpw* | *-macos*)
18011830 vendor=apple
18021831 ;;
1803 -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
1832 *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
18041833 vendor=atari
18051834 ;;
1806 -vos*)
1835 *-vos*)
18071836 vendor=stratus
18081837 ;;
18091838 esac
1810 basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
18111839 ;;
18121840 esac
18131841
1814 echo $basic_machine$os
1842 echo "$cpu-$vendor-${kernel:+$kernel-}$os"
18151843 exit
18161844
18171845 # Local variables:
1818 # eval: (add-hook 'write-file-hooks 'time-stamp)
1846 # eval: (add-hook 'before-save-hook 'time-stamp)
18191847 # time-stamp-start: "timestamp='"
18201848 # time-stamp-format: "%:y-%02m-%02d"
18211849 # time-stamp-end: "'"
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.69 for unbound 1.10.1.
2 # Generated by GNU Autoconf 2.69 for unbound 1.11.0.
33 #
44 # Report bugs to <unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues>.
55 #
590590 # Identity of this package.
591591 PACKAGE_NAME='unbound'
592592 PACKAGE_TARNAME='unbound'
593 PACKAGE_VERSION='1.10.1'
594 PACKAGE_STRING='unbound 1.10.1'
593 PACKAGE_VERSION='1.11.0'
594 PACKAGE_STRING='unbound 1.11.0'
595595 PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues'
596596 PACKAGE_URL=''
597597
648648 ENABLE_DNSCRYPT_XCHACHA20
649649 DNSTAP_OBJ
650650 DNSTAP_SRC
651 DNSTAP_SOCKET_PATH
651652 opt_dnstap_socket_path
652653 ENABLE_DNSTAP
653654 PROTOC_C
698699 PYTHON_CPPFLAGS
699700 PYTHON
700701 PYTHON_VERSION
702 DYNLIBMOD_EXTRALIBS
703 DYNLIBMOD_HEADER
704 DYNLIBMOD_OBJ
705 WITH_DYNLIBMODULE
701706 PTHREAD_CFLAGS_ONLY
702707 PTHREAD_CFLAGS
703708 PTHREAD_LIBS
854859 with_pthreads
855860 with_solaris_threads
856861 with_syslog_facility
862 with_dynlibmodule
857863 with_pyunbound
858864 with_pythonmodule
859865 enable_swig_version_check
882888 enable_dnstap
883889 with_dnstap_socket_path
884890 with_protobuf_c
885 with_libfstrm
886891 enable_dnscrypt
887892 with_libsodium
888893 enable_cachedb
889894 enable_ipsecmod
890895 enable_ipset
891896 with_libmnl
897 enable_explicit_port_randomisation
892898 with_libunbound_only
893899 '
894900 ac_precious_vars='build_alias
14511457 # Omit some internal or obsolete options to make the list less imposing.
14521458 # This message is too long to be a string in the A/UX 3.1 sh.
14531459 cat <<_ACEOF
1454 \`configure' configures unbound 1.10.1 to adapt to many kinds of systems.
1460 \`configure' configures unbound 1.11.0 to adapt to many kinds of systems.
14551461
14561462 Usage: $0 [OPTION]... [VAR=VALUE]...
14571463
15161522
15171523 if test -n "$ac_init_help"; then
15181524 case $ac_init_help in
1519 short | recursive ) echo "Configuration of unbound 1.10.1:";;
1525 short | recursive ) echo "Configuration of unbound 1.11.0:";;
15201526 esac
15211527 cat <<\_ACEOF
15221528
15711577 --enable-allsymbols export all symbols from libunbound and link binaries
15721578 to it, smaller install size but libunbound export
15731579 table is polluted by internal symbols
1574 --enable-dnstap Enable dnstap support (requires fstrm, protobuf-c)
1580 --enable-dnstap Enable dnstap support (requires protobuf-c)
15751581 --enable-dnscrypt Enable dnscrypt support (requires libsodium)
15761582 --enable-cachedb enable cachedb module that can use external cache
15771583 storage
15781584 --enable-ipsecmod Enable ipsecmod module that facilitates
15791585 opportunistic IPsec
15801586 --enable-ipset enable ipset module
1587 --disable-explicit-port-randomisation
1588 disable explicit source port randomisation and rely
1589 on the kernel to provide random source ports
15811590
15821591 Optional Packages:
15831592 --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
16131622 --with-solaris-threads use solaris native thread library.
16141623 --with-syslog-facility=LOCAL0 - LOCAL7
16151624 set SYSLOG_FACILITY, default DAEMON
1625 --with-dynlibmodule build dynamic library module, or
1626 --without-dynlibmodule to disable it. (default=no)
16161627 --with-pyunbound build PyUnbound, or --without-pyunbound to skip it.
16171628 (default=no)
16181629 --with-pythonmodule build Python module, or --without-pythonmodule to
16331644 --with-dnstap-socket-path=pathname
16341645 set default dnstap socket path
16351646 --with-protobuf-c=path Path where protobuf-c is installed, for dnstap
1636 --with-libfstrm=path Path where libfstrm is installed, for dnstap
16371647 --with-libsodium=path Path where libsodium is installed, for dnscrypt
16381648 --with-libmnl=path specify explicit path for libmnl.
16391649 --with-libunbound-only do not build daemon and tool programs
17391749 test -n "$ac_init_help" && exit $ac_status
17401750 if $ac_init_version; then
17411751 cat <<\_ACEOF
1742 unbound configure 1.10.1
1752 unbound configure 1.11.0
17431753 generated by GNU Autoconf 2.69
17441754
17451755 Copyright (C) 2012 Free Software Foundation, Inc.
24482458 This file contains any messages produced by compilers while
24492459 running configure, to aid debugging if configure makes a mistake.
24502460
2451 It was created by unbound $as_me 1.10.1, which was
2461 It was created by unbound $as_me 1.11.0, which was
24522462 generated by GNU Autoconf 2.69. Invocation command line was
24532463
24542464 $ $0 $@
27982808
27992809 UNBOUND_VERSION_MAJOR=1
28002810
2801 UNBOUND_VERSION_MINOR=10
2802
2803 UNBOUND_VERSION_MICRO=1
2811 UNBOUND_VERSION_MINOR=11
2812
2813 UNBOUND_VERSION_MICRO=0
28042814
28052815
28062816 LIBUNBOUND_CURRENT=9
2807 LIBUNBOUND_REVISION=8
2817 LIBUNBOUND_REVISION=9
28082818 LIBUNBOUND_AGE=1
28092819 # 1.0.0 had 0:12:0
28102820 # 1.0.1 had 0:13:0
28802890 # 1.9.6 had 9:6:1
28812891 # 1.10.0 had 9:7:1
28822892 # 1.10.1 had 9:8:1
2893 # 1.11.0 had 9:9:1
28832894
28842895 # Current -- the number of the binary API that we're implementing
28852896 # Revision -- which iteration of the implementation of the binary
1472814739 done
1472914740
1473014741
14742 # Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH
14743 for ac_header in TargetConditionals.h
14744 do :
14745 ac_fn_c_check_header_mongrel "$LINENO" "TargetConditionals.h" "ac_cv_header_TargetConditionals_h" "$ac_includes_default"
14746 if test "x$ac_cv_header_TargetConditionals_h" = xyes; then :
14747 cat >>confdefs.h <<_ACEOF
14748 #define HAVE_TARGETCONDITIONALS_H 1
14749 _ACEOF
14750
14751 fi
14752
14753 done
14754
14755
1473114756 # check for types.
1473214757 # Using own tests for int64* because autoconf builtin only give 32bit.
1473314758 ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default"
1717017195 _ACEOF
1717117196
1717217197
17198 # Check for dynamic library module
17199
17200 # Check whether --with-dynlibmodule was given.
17201 if test "${with_dynlibmodule+set}" = set; then :
17202 withval=$with_dynlibmodule;
17203 else
17204 withval="no"
17205 fi
17206
17207
17208 if test x_$withval != x_no; then
17209
17210 $as_echo "#define WITH_DYNLIBMODULE 1" >>confdefs.h
17211
17212 WITH_DYNLIBMODULE=yes
17213
17214 DYNLIBMOD_OBJ="dynlibmod.lo"
17215
17216 DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h'
17217
17218 if test $on_mingw = "no"; then
17219 DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic"
17220 else
17221 DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a"
17222 fi
17223
17224 fi
17225
1717317226 # Check for PyUnbound
1717417227
1717517228 # Check whether --with-pyunbound was given.
1731117364 $as_echo "$PYTHON_LDFLAGS" >&6; }
1731217365
1731317366
17367 if test -z "$PYTHON_LIBDIR"; then
17368 PYTHON_LIBDIR=`$PYTHON -c "from distutils.sysconfig import *; \
17369 print(get_config_var('LIBDIR'));"`
17370 fi
17371
1731417372 #
1731517373 # Check for site packages
1731617374 #
1741517473 CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
1741617474 else
1741717475 CPPFLAGS="$PYTHON_CPPFLAGS"
17476 fi
17477 if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then
17478
17479 if test "x$enable_rpath" = xyes; then
17480 if echo "$PYTHON_LIBDIR" | grep "^/" >/dev/null; then
17481 RUNTIME_PATH="$RUNTIME_PATH -R$PYTHON_LIBDIR"
17482 fi
17483 fi
17484
1741817485 fi
1741917486 ub_have_python=yes
1742017487 if test -n "$PKG_CONFIG" && \
1825818325 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
1825918326 $as_echo "no" >&6; }
1826018327 fi
18261 for ac_header in openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h
18328 for ac_header in openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h
1826218329 do :
1826318330 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
1826418331 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
1827218339
1827318340 done
1827418341
18275 for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback
18342 for ac_func in OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback
1827618343 do :
1827718344 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
1827818345 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
1828818355 # these check_funcs need -lssl
1828918356 BAKLIBS="$LIBS"
1829018357 LIBS="-lssl $LIBS"
18291 for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites
18358 for ac_func in OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_tlsext_ticket_key_evp_cb
1829218359 do :
1829318360 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
1829418361 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
1910619173 if test "${with_libevent+set}" = set; then :
1910719174 withval=$with_libevent;
1910819175 else
19109 withval="no"
19110 fi
19111
19112 if test x_$withval = x_yes -o x_$withval != x_no; then
19176 with_libevent="no"
19177 fi
19178
19179 if test "x_$with_libevent" != x_no; then
19180
19181 $as_echo "#define USE_LIBEVENT 1" >>confdefs.h
19182
1911319183 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libevent" >&5
1911419184 $as_echo_n "checking for libevent... " >&6; }
19115 if test x_$withval = x_ -o x_$withval = x_yes; then
19116 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
19185 if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then
19186 with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1911719187 fi
19118 for dir in $withval; do
19188 for dir in $with_libevent; do
1911919189 thedir="$dir"
1912019190 if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then
1912119191 found_libevent="yes"
19122 if test "$thedir" != "/usr"; then
19123 CPPFLAGS="$CPPFLAGS -I$thedir/include"
19124 fi
19125 break;
19126 fi
19192 if test "$thedir" != "/usr"; then
19193 CPPFLAGS="$CPPFLAGS -I$thedir/include"
19194 fi
19195 break;
19196 fi
1912719197 done
1912819198 if test x_$found_libevent != x_yes; then
1912919199 if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then
1913019200 # libevent source directory
19131 { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $thedir" >&5
19201 { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $thedir" >&5
1913219202 $as_echo "found in $thedir" >&6; }
19133 CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include"
19203 CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include"
1913419204 BAK_LDFLAGS_SET="1"
1913519205 BAK_LDFLAGS="$LDFLAGS"
1913619206 # remove evdns from linking
1914319213 cp $ev_files_o build/libevent
1914419214 cp $ev_files_lo build/libevent
1914519215 cp $ev_files_libso build/libevent/.libs
19146 LATE_LDFLAGS="build/libevent/*.lo -lm"
19216 LATE_LDFLAGS="build/libevent/*.lo -lm"
1914719217 LDFLAGS="build/libevent/*.o $LDFLAGS -lm"
1914819218 else
19149 as_fn_error $? "Cannot find the libevent library in $withval
19219 as_fn_error $? "Cannot find the libevent library in $with_libevent
1915019220 You can restart ./configure --with-libevent=no to use a builtin alternative.
1915119221 Please note that this alternative is not as capable as libevent when using
1915219222 large outgoing port ranges. " "$LINENO" 5
2096721037
2096821038 fi
2096921039
20970
20971 # Check whether --with-libfstrm was given.
20972 if test "${with_libfstrm+set}" = set; then :
20973 withval=$with_libfstrm;
20974 CFLAGS="$CFLAGS -I$withval/include"
20975 LDFLAGS="$LDFLAGS -L$withval/lib"
20976
20977 fi
20978
20979 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing fstrm_iothr_init" >&5
20980 $as_echo_n "checking for library containing fstrm_iothr_init... " >&6; }
20981 if ${ac_cv_search_fstrm_iothr_init+:} false; then :
20982 $as_echo_n "(cached) " >&6
20983 else
20984 ac_func_search_save_LIBS=$LIBS
20985 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
20986 /* end confdefs.h. */
20987
20988 /* Override any GCC internal prototype to avoid an error.
20989 Use char because int might match the return type of a GCC
20990 builtin and then its argument prototype would still apply. */
20991 #ifdef __cplusplus
20992 extern "C"
20993 #endif
20994 char fstrm_iothr_init ();
20995 int
20996 main ()
20997 {
20998 return fstrm_iothr_init ();
20999 ;
21000 return 0;
21001 }
21002 _ACEOF
21003 for ac_lib in '' fstrm; do
21004 if test -z "$ac_lib"; then
21005 ac_res="none required"
21006 else
21007 ac_res=-l$ac_lib
21008 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
21009 fi
21010 if ac_fn_c_try_link "$LINENO"; then :
21011 ac_cv_search_fstrm_iothr_init=$ac_res
21012 fi
21013 rm -f core conftest.err conftest.$ac_objext \
21014 conftest$ac_exeext
21015 if ${ac_cv_search_fstrm_iothr_init+:} false; then :
21016 break
21017 fi
21018 done
21019 if ${ac_cv_search_fstrm_iothr_init+:} false; then :
21020
21021 else
21022 ac_cv_search_fstrm_iothr_init=no
21023 fi
21024 rm conftest.$ac_ext
21025 LIBS=$ac_func_search_save_LIBS
21026 fi
21027 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_fstrm_iothr_init" >&5
21028 $as_echo "$ac_cv_search_fstrm_iothr_init" >&6; }
21029 ac_res=$ac_cv_search_fstrm_iothr_init
21030 if test "$ac_res" != no; then :
21031 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
21032
21033 else
21034 as_fn_error $? "The fstrm library was not found. Please install fstrm!" "$LINENO" 5
21035 fi
21036
2103721040 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing protobuf_c_message_pack" >&5
2103821041 $as_echo_n "checking for library containing protobuf_c_message_pack... " >&6; }
2103921042 if ${ac_cv_search_protobuf_c_message_pack+:} false; then :
2110721110 #define DNSTAP_SOCKET_PATH "$hdr_dnstap_socket_path"
2110821111 _ACEOF
2110921112
21110
21111 DNSTAP_SRC="dnstap/dnstap.c dnstap/dnstap.pb-c.c"
21112
21113 DNSTAP_OBJ="dnstap.lo dnstap.pb-c.lo"
21113 DNSTAP_SOCKET_PATH="$hdr_dnstap_socket_path"
21114
21115
21116 DNSTAP_SRC="dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"
21117
21118 DNSTAP_OBJ="dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"
2111421119
2111521120
2111621121 else
2144221447 # nothing
2144321448 ;;
2144421449 esac
21450 # Check whether --enable-explicit-port-randomisation was given.
21451 if test "${enable_explicit_port_randomisation+set}" = set; then :
21452 enableval=$enable_explicit_port_randomisation;
21453 fi
21454
21455 case "$enable_explicit_port_randomisation" in
21456 no)
21457
21458 $as_echo "#define DISABLE_EXPLICIT_PORT_RANDOMISATION 1" >>confdefs.h
21459
21460 ;;
21461 yes|*)
21462 ;;
21463 esac
21464
2144521465
2144621466 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ${MAKE:-make} supports $< with implicit rule in scope" >&5
2144721467 $as_echo_n "checking if ${MAKE:-make} supports $< with implicit rule in scope... " >&6; }
2159821618
2159921619
2160021620
21601 version=1.10.1
21621 version=1.11.0
2160221622
2160321623 date=`date +'%b %e, %Y'`
2160421624
2211722137 # report actual input values of CONFIG_FILES etc. instead of their
2211822138 # values after options handling.
2211922139 ac_log="
22120 This file was extended by unbound $as_me 1.10.1, which was
22140 This file was extended by unbound $as_me 1.11.0, which was
2212122141 generated by GNU Autoconf 2.69. Invocation command line was
2212222142
2212322143 CONFIG_FILES = $CONFIG_FILES
2218322203 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
2218422204 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
2218522205 ac_cs_version="\\
22186 unbound config.status 1.10.1
22206 unbound config.status 1.11.0
2218722207 configured by $0, generated by GNU Autoconf 2.69,
2218822208 with options \\"\$ac_cs_config\\"
2218922209
99
1010 # must be numbers. ac_defun because of later processing
1111 m4_define([VERSION_MAJOR],[1])
12 m4_define([VERSION_MINOR],[10])
13 m4_define([VERSION_MICRO],[1])
12 m4_define([VERSION_MINOR],[11])
13 m4_define([VERSION_MICRO],[0])
1414 AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl or https://github.com/NLnetLabs/unbound/issues, unbound)
1515 AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR])
1616 AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR])
1717 AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO])
1818
1919 LIBUNBOUND_CURRENT=9
20 LIBUNBOUND_REVISION=8
20 LIBUNBOUND_REVISION=9
2121 LIBUNBOUND_AGE=1
2222 # 1.0.0 had 0:12:0
2323 # 1.0.1 had 0:13:0
9393 # 1.9.6 had 9:6:1
9494 # 1.10.0 had 9:7:1
9595 # 1.10.1 had 9:8:1
96 # 1.11.0 had 9:9:1
9697
9798 # Current -- the number of the binary API that we're implementing
9899 # Revision -- which iteration of the implementation of the binary
397398
398399 # Checks for header files.
399400 AC_CHECK_HEADERS([stdarg.h stdbool.h netinet/in.h netinet/tcp.h sys/param.h sys/socket.h sys/un.h sys/uio.h sys/resource.h arpa/inet.h syslog.h netdb.h sys/wait.h pwd.h glob.h grp.h login_cap.h winsock2.h ws2tcpip.h endian.h sys/endian.h libkern/OSByteOrder.h sys/ipc.h sys/shm.h],,, [AC_INCLUDES_DEFAULT])
401
402 # Check for Apple header. This uncovers TARGET_OS_IPHONE, TARGET_OS_TV or TARGET_OS_WATCH
403 AC_CHECK_HEADERS([TargetConditionals.h])
400404
401405 # check for types.
402406 # Using own tests for int64* because autoconf builtin only give 32bit.
623627 esac
624628 AC_DEFINE_UNQUOTED(UB_SYSLOG_FACILITY,${UNBOUND_SYSLOG_FACILITY},[the SYSLOG_FACILITY to use, default LOG_DAEMON])
625629
630 # Check for dynamic library module
631 AC_ARG_WITH(dynlibmodule,
632 AC_HELP_STRING([--with-dynlibmodule],
633 [build dynamic library module, or --without-dynlibmodule to disable it. (default=no)]),
634 [], [ withval="no" ])
635
636 if test x_$withval != x_no; then
637 AC_DEFINE(WITH_DYNLIBMODULE, 1, [Define if you want dynlib module.])
638 WITH_DYNLIBMODULE=yes
639 AC_SUBST(WITH_DYNLIBMODULE)
640 DYNLIBMOD_OBJ="dynlibmod.lo"
641 AC_SUBST(DYNLIBMOD_OBJ)
642 DYNLIBMOD_HEADER='$(srcdir)/dynlibmod/dynlibmod.h'
643 AC_SUBST(DYNLIBMOD_HEADER)
644 if test $on_mingw = "no"; then
645 DYNLIBMOD_EXTRALIBS="-ldl -export-dynamic"
646 else
647 DYNLIBMOD_EXTRALIBS="-Wl,--export-all-symbols,--out-implib,libunbound.a"
648 fi
649 AC_SUBST(DYNLIBMOD_EXTRALIBS)
650 fi
651
626652 # Check for PyUnbound
627653 AC_ARG_WITH(pyunbound,
628654 AC_HELP_STRING([--with-pyunbound],
673699 CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
674700 else
675701 CPPFLAGS="$PYTHON_CPPFLAGS"
702 fi
703 if test "$PYTHON_LIBDIR" != "/usr/lib" -a "$PYTHON_LIBDIR" != "" -a "$PYTHON_LIBDIR" != "/usr/lib64"; then
704 ACX_RUNTIME_PATH_ADD([$PYTHON_LIBDIR])
676705 fi
677706 ub_have_python=yes
678707 PKG_CHECK_EXISTS(["python${PY_MAJOR_VERSION}"],
820849 else
821850 AC_MSG_RESULT([no])
822851 fi
823 AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h],,, [AC_INCLUDES_DEFAULT])
824 AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify SSL_CTX_set_tlsext_ticket_key_cb EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback])
852 AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h],,, [AC_INCLUDES_DEFAULT])
853 AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback])
825854
826855 # these check_funcs need -lssl
827856 BAKLIBS="$LIBS"
828857 LIBS="-lssl $LIBS"
829 AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites])
858 AC_CHECK_FUNCS([OPENSSL_init_ssl SSL_CTX_set_security_level SSL_set1_host SSL_get0_peername X509_VERIFY_PARAM_set1_host SSL_CTX_set_ciphersuites SSL_CTX_set_tlsext_ticket_key_evp_cb])
830859 LIBS="$BAKLIBS"
831860
832861 AC_CHECK_DECLS([SSL_COMP_get_compression_methods,sk_SSL_COMP_pop_free,SSL_CTX_set_ecdh_auto], [], [], [
12141243 # check for libevent
12151244 AC_ARG_WITH(libevent, AC_HELP_STRING([--with-libevent=pathname],
12161245 [use libevent (will check /usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr or you can specify an explicit path). Slower, but allows use of large outgoing port ranges.]),
1217 [ ],[ withval="no" ])
1218 if test x_$withval = x_yes -o x_$withval != x_no; then
1246 [ ],[ with_libevent="no" ])
1247 if test "x_$with_libevent" != x_no; then
1248 AC_DEFINE([USE_LIBEVENT], [1], [Define if you enable libevent])
12191249 AC_MSG_CHECKING(for libevent)
1220 if test x_$withval = x_ -o x_$withval = x_yes; then
1221 withval="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
1250 if test "x_$with_libevent" = x_ -o "x_$with_libevent" = x_yes; then
1251 with_libevent="/usr/local /opt/local /usr/lib /usr/pkg /usr/sfw /usr"
12221252 fi
1223 for dir in $withval; do
1253 for dir in $with_libevent; do
12241254 thedir="$dir"
12251255 if test -f "$dir/include/event.h" -o -f "$dir/include/event2/event.h"; then
12261256 found_libevent="yes"
1227 dnl assume /usr is in default path.
1228 if test "$thedir" != "/usr"; then
1229 CPPFLAGS="$CPPFLAGS -I$thedir/include"
1230 fi
1231 break;
1232 fi
1257 dnl assume /usr is in default path.
1258 if test "$thedir" != "/usr"; then
1259 CPPFLAGS="$CPPFLAGS -I$thedir/include"
1260 fi
1261 break;
1262 fi
12331263 done
12341264 if test x_$found_libevent != x_yes; then
12351265 if test -f "$dir/event.h" -a \( -f "$dir/libevent.la" -o -f "$dir/libev.la" \) ; then
12361266 # libevent source directory
1237 AC_MSG_RESULT(found in $thedir)
1238 CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include"
1267 AC_MSG_RESULT(found in $thedir)
1268 CPPFLAGS="$CPPFLAGS -I$thedir -I$thedir/include"
12391269 BAK_LDFLAGS_SET="1"
12401270 BAK_LDFLAGS="$LDFLAGS"
12411271 # remove evdns from linking
12481278 cp $ev_files_o build/libevent
12491279 cp $ev_files_lo build/libevent
12501280 cp $ev_files_libso build/libevent/.libs
1251 LATE_LDFLAGS="build/libevent/*.lo -lm"
1281 LATE_LDFLAGS="build/libevent/*.lo -lm"
12521282 LDFLAGS="build/libevent/*.o $LDFLAGS -lm"
12531283 else
1254 AC_MSG_ERROR([Cannot find the libevent library in $withval
1284 AC_MSG_ERROR([Cannot find the libevent library in $with_libevent
12551285 You can restart ./configure --with-libevent=no to use a builtin alternative.
12561286 Please note that this alternative is not as capable as libevent when using
12571287 large outgoing port ranges. ])
16871717 ACX_ESCAPE_BACKSLASH($opt_dnstap_socket_path, hdr_dnstap_socket_path)
16881718 AC_DEFINE_UNQUOTED(DNSTAP_SOCKET_PATH,
16891719 ["$hdr_dnstap_socket_path"], [default dnstap socket path])
1690
1691 AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c"])
1692 AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo"])
1720 AC_SUBST(DNSTAP_SOCKET_PATH,["$hdr_dnstap_socket_path"])
1721
1722 AC_SUBST([DNSTAP_SRC], ["dnstap/dnstap.c dnstap/dnstap.pb-c.c dnstap/dnstap_fstrm.c dnstap/dtstream.c"])
1723 AC_SUBST([DNSTAP_OBJ], ["dnstap.lo dnstap.pb-c.lo dnstap_fstrm.lo dtstream.lo"])
16931724 ],
16941725 [
16951726 AC_SUBST([ENABLE_DNSTAP], [0])
17771808 # nothing
17781809 ;;
17791810 esac
1811 AC_ARG_ENABLE(explicit-port-randomisation, AC_HELP_STRING([--disable-explicit-port-randomisation], [disable explicit source port randomisation and rely on the kernel to provide random source ports]))
1812 case "$enable_explicit_port_randomisation" in
1813 no)
1814 AC_DEFINE([DISABLE_EXPLICIT_PORT_RANDOMISATION], [1], [Define this to enable kernel based UDP source port randomization.])
1815 ;;
1816 yes|*)
1817 ;;
1818 esac
1819
17801820
17811821 AC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope])
17821822 # on openBSD, the implicit rule make $< work.
1212 +This also causes an additional A query to be sent for each AAAA query.
1313 +This breaks DNSSEC!
1414 +.TP
15 .B private\-address: \fI<IP address or subnet>
16 Give IPv4 of IPv6 addresses or classless subnets. These are addresses
17 on your private network, and are not allowed to be returned for
15 .B aggressive\-nsec: \fI<yes or no>
16 Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN
17 and other denials, using information from previous NXDOMAINs answers.
1818 Index: trunk/iterator/iter_scrub.c
1919 ===================================================================
2020 --- trunk/iterator/iter_scrub.c (revision 4357)
124124 + * ASN: This event state was added as an intermediary step between
125125 + * QUERYTARGETS_STATE and the next step, in order to cast a subquery for the
126126 + * purpose of caching A records for the queried name.
127 + *
127 + *
128128 + * @param qstate: query state.
129129 + * @param iq: iterator query state.
130130 + * @param ie: iterator shared global environment.
146146 +
147147 + /* re-throw same query, but with a different type */
148148 + if(!generate_sub_request(iq->qchase.qname,
149 + iq->qchase.qname_len, LDNS_RR_TYPE_A,
149 + iq->qchase.qname_len, LDNS_RR_TYPE_A,
150150 + iq->qchase.qclass, qstate, id, iq,
151 + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1)) {
151 + INIT_REQUEST_STATE, FINISHED_STATE, &subq, 1, 0)) {
152152 + log_nametypeclass(VERB_ALGO, "ASN-AAAA-filter: failed "
153153 + "preloading of A record for",
154154 + iq->qchase.qname, LDNS_RR_TYPE_A,
187187 return 0;
188188 }
189189
190 +/**
190 +/**
191191 + * ASN: Do final processing on responses to A queries originated from AAAA
192192 + * queries. Events reach this state after the iterative resolution algorithm
193193 + * terminates.
0 #### Android...
1 #
2 # Heavily hacked 15-android.conf based on OpenSSL's config file of the same name.
3 # This 15-android.conf avoids compiler errors using NDK-r20. This 15-android.conf
4 # requires an environment set (sourced) using setenv-android.sh.
5
6 my %targets = (
7 "android" => {
8 inherit_from => [ "linux-generic32" ],
9 template => 1,
10 bin_cflags => add("-fPIE"),
11 bin_lflags => add("-pie"),
12 enable => [ ],
13 },
14
15 "android-arm" => {
16 inherit_from => [ "android", asm("armv4_asm") ],
17 bn_ops => [ "BN_LLONG", "RC4_CHAR" ],
18 },
19 "android-arm64" => {
20 inherit_from => [ "android", asm("aarch64_asm") ],
21 bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_CHAR" ],
22 perlasm_scheme => "linux64",
23 },
24
25 "android-x86" => {
26 inherit_from => [ "android", asm("x86_asm") ],
27 cflags => add(picker(release => "-fomit-frame-pointer")),
28 bn_ops => [ "BN_LLONG", "RC4_INT" ],
29 perlasm_scheme => "android",
30 },
31 "android-x86_64" => {
32 inherit_from => [ "android", asm("x86_64_asm") ],
33 bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_INT" ],
34 perlasm_scheme => "elf",
35 },
36 );
0 #!/usr/bin/env bash
1
2 echo "Downloading Expat"
3 if ! curl -L -k -s -o expat-2.2.9.tar.gz https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.gz;
4 then
5 echo "Failed to download Expat"
6 exit 1
7 fi
8
9 echo "Unpacking Expat"
10 rm -rf ./expat-2.2.9
11 if ! tar -xf expat-2.2.9.tar.gz;
12 then
13 echo "Failed to unpack Expat"
14 exit 1
15 fi
16
17 cd expat-2.2.9 || exit 1
18
19 echo "Configuring Expat"
20 if ! ./configure --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" --prefix="$ANDROID_PREFIX"; then
21 echo "Error: Failed to configure Expat"
22 exit 1
23 fi
24
25 # Cleanup warnings, https://github.com/libexpat/libexpat/issues/383
26 echo "Fixing Makefiles"
27 (IFS="" find "$PWD" -name 'Makefile' -print | while read -r file
28 do
29 cp -p "$file" "$file.fixed"
30 sed 's|-Wduplicated-cond ||g; s|-Wduplicated-branches ||g; s|-Wlogical-op ||g' "$file" > "$file.fixed"
31 mv "$file.fixed" "$file"
32
33 cp -p "$file" "$file.fixed"
34 sed 's|-Wrestrict ||g; s|-Wjump-misses-init ||g; s|-Wmisleading-indentation ||g' "$file" > "$file.fixed"
35 mv "$file.fixed" "$file"
36 done)
37
38 echo "Building Expat"
39 if ! make; then
40 echo "Failed to build Expat"
41 exit 1
42 fi
43
44 echo "Installing Expat"
45 if ! make install; then
46 echo "Failed to install Expat"
47 exit 1
48 fi
49
50 exit 0
0 #!/usr/bin/env bash
1
2 if [ -z "$ANDROID_SDK_ROOT" ]; then
3 echo "ERROR: ANDROID_SDK_ROOT is not a valid path. Please set it."
4 echo "SDK root is $ANDROID_SDK_ROOT"
5 exit 1
6 fi
7
8 if [ -z "$ANDROID_NDK_ROOT" ]; then
9 echo "ERROR: ANDROID_NDK_ROOT is not a valid path. Please set it."
10 echo "NDK root is $ANDROID_NDK_ROOT"
11 exit 1
12 fi
13
14 echo "Using ANDROID_SDK_ROOT: $ANDROID_SDK_ROOT"
15 echo "Using ANDROID_NDK_ROOT: $ANDROID_NDK_ROOT"
16
17 echo "Downloading SDK"
18 if ! curl -L -k -s -o "$HOME/android-sdk.zip" https://dl.google.com/android/repository/commandlinetools-linux-6200805_latest.zip;
19 then
20 echo "Failed to download SDK"
21 exit 1
22 fi
23
24 echo "Downloading NDK"
25 if ! curl -L -k -s -o "$HOME/android-ndk.zip" https://dl.google.com/android/repository/android-ndk-r20b-linux-x86_64.zip;
26 then
27 echo "Failed to download NDK"
28 exit 1
29 fi
30
31 echo "Unpacking SDK to $ANDROID_SDK_ROOT"
32 if ! unzip -qq "$HOME/android-sdk.zip" -d "$ANDROID_SDK_ROOT";
33 then
34 echo "Failed to unpack SDK"
35 exit 1
36 fi
37
38 echo "Unpacking NDK to $ANDROID_NDK_ROOT"
39 if ! unzip -qq "$HOME/android-ndk.zip" -d "$HOME";
40 then
41 echo "Failed to unpack NDK"
42 exit 1
43 fi
44
45 if ! mv "$HOME/android-ndk-r20b" "$ANDROID_NDK_ROOT";
46 then
47 echo "Failed to move $HOME/android-ndk-r20b to $ANDROID_NDK_ROOT"
48 exit 1
49 fi
50
51 rm -f "$HOME/android-sdk.zip"
52 rm -f "$HOME/android-ndk.zip"
53
54 # https://stackoverflow.com/a/47028911/608639
55 touch "$ANDROID_SDK_ROOT/repositories.cfg"
56
57 echo "Finished installing SDK and NDK"
58
59 exit 0
0 #!/usr/bin/env bash
1
2 echo "Downloading OpenSSL"
3 if ! curl -L -k -s -o openssl-1.1.1d.tar.gz https://www.openssl.org/source/openssl-1.1.1d.tar.gz;
4 then
5 echo "Failed to download OpenSSL"
6 exit 1
7 fi
8
9 echo "Unpacking OpenSSL"
10 rm -rf ./openssl-1.1.1d
11 if ! tar -xf openssl-1.1.1d.tar.gz;
12 then
13 echo "Failed to unpack OpenSSL"
14 exit 1
15 fi
16
17 cd openssl-1.1.1d || exit 1
18
19 if ! cp ../contrib/android/15-android.conf Configurations/; then
20 echo "Failed to copy OpenSSL Android config"
21 exit 1
22 fi
23
24 echo "Configuring OpenSSL"
25 if ! ./Configure "$OPENSSL_HOST" no-comp no-asm no-hw no-engine shared \
26 --prefix="$ANDROID_PREFIX" --openssldir="$ANDROID_PREFIX"; then
27 echo "Failed to configure OpenSSL"
28 exit 1
29 fi
30
31 echo "Building OpenSSL"
32 if ! make; then
33 echo "Failed to build OpenSSL"
34 exit 1
35 fi
36
37 echo "Installing OpenSSL"
38 if ! make install_sw; then
39 echo "Failed to install OpenSSL"
40 exit 1
41 fi
42
43 exit 0
0 #!/usr/bin/env bash
1
2 # This step should install tools needed for all packages - OpenSSL, Expat and Unbound
3 echo "Updating tools"
4 sudo apt-get -qq update
5 sudo apt-get -qq install --no-install-recommends curl tar zip unzip perl openjdk-8-jdk autoconf automake libtool pkg-config
0 #!/usr/bin/env bash
1
2 # ====================================================================
3 # Sets the cross compile environment for Android
4 #
5 # Based upon OpenSSL's setenv-android.sh by TH, JW, and SM.
6 # Heavily modified by JWW for Crypto++.
7 # Updated by Skycoder42 for current recommendations for Android.
8 # Modified by JWW for Unbound.
9 # ====================================================================
10
11 #########################################
12 ##### Some validation #####
13 #########################################
14
15 if [ -z "$ANDROID_API" ]; then
16 echo "ANDROID_API is not set. Please set it"
17 [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1
18 fi
19
20 if [ -z "$ANDROID_CPU" ]; then
21 echo "ANDROID_CPU is not set. Please set it"
22 [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1
23 fi
24
25 if [ ! -d "$ANDROID_NDK_ROOT" ]; then
26 echo "ERROR: ANDROID_NDK_ROOT is not a valid path. Please set it."
27 echo "NDK root is $ANDROID_NDK_ROOT"
28 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
29 fi
30
31 # cryptest-android.sh may run this script without sourcing.
32 if [ "$0" = "${BASH_SOURCE[0]}" ]; then
33 echo "setenv-android.sh is usually sourced, but not this time."
34 fi
35
36 #####################################################################
37
38 # Need to set THIS_HOST to darwin-x86_64, linux-x86_64,
39 # windows, or windows-x86_64
40
41 if [[ "$(uname -s | grep -i -c darwin)" -ne 0 ]]; then
42 THIS_HOST=darwin-x86_64
43 elif [[ "$(uname -s | grep -i -c linux)" -ne 0 ]]; then
44 THIS_HOST=linux-x86_64
45 else
46 echo "ERROR: Unknown host"
47 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
48 fi
49
50 ANDROID_TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST/bin"
51 ANDROID_SYSROOT="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$THIS_HOST/sysroot"
52
53 # Error checking
54 if [ ! -d "$ANDROID_TOOLCHAIN" ]; then
55 echo "ERROR: ANDROID_TOOLCHAIN is not a valid path. Please set it."
56 echo "Path is $ANDROID_TOOLCHAIN"
57 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
58 fi
59
60 # Error checking
61 if [ ! -d "$ANDROID_SYSROOT" ]; then
62 echo "ERROR: ANDROID_SYSROOT is not a valid path. Please set it."
63 echo "Path is $ANDROID_SYSROOT"
64 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
65 fi
66
67 #####################################################################
68
69 THE_ARCH=$(tr '[:upper:]' '[:lower:]' <<< "$ANDROID_CPU")
70
71 # https://developer.android.com/ndk/guides/abis.html
72 case "$THE_ARCH" in
73 armv7*|armeabi*)
74 CC="armv7a-linux-androideabi$ANDROID_API-clang"
75 CXX="armv7a-linux-androideabi$ANDROID_API-clang++"
76 LD="arm-linux-androideabi-ld"
77 AS="arm-linux-androideabi-as"
78 AR="arm-linux-androideabi-ar"
79 RANLIB="arm-linux-androideabi-ranlib"
80 STRIP="arm-linux-androideabi-strip"
81
82 CFLAGS="-march=armv7-a -mthumb -mfloat-abi=softfp -funwind-tables -fexceptions"
83 CXXFLAGS="-march=armv7-a -mthumb -mfloat-abi=softfp -funwind-tables -fexceptions -frtti"
84 ;;
85
86 armv8*|aarch64|arm64*)
87 CC="aarch64-linux-android$ANDROID_API-clang"
88 CXX="aarch64-linux-android$ANDROID_API-clang++"
89 LD="aarch64-linux-android-ld"
90 AS="aarch64-linux-android-as"
91 AR="aarch64-linux-android-ar"
92 RANLIB="aarch64-linux-android-ranlib"
93 STRIP="aarch64-linux-android-strip"
94
95 CFLAGS="-funwind-tables -fexceptions"
96 CXXFLAGS="-funwind-tables -fexceptions -frtti"
97 ;;
98
99 x86)
100 CC="i686-linux-android$ANDROID_API-clang"
101 CXX="i686-linux-android$ANDROID_API-clang++"
102 LD="i686-linux-android-ld"
103 AS="i686-linux-android-as"
104 AR="i686-linux-android-ar"
105 RANLIB="i686-linux-android-ranlib"
106 STRIP="i686-linux-android-strip"
107
108 CFLAGS="-mtune=intel -mssse3 -mfpmath=sse -funwind-tables -fexceptions"
109 CXXFLAGS="-mtune=intel -mssse3 -mfpmath=sse -funwind-tables -fexceptions -frtti"
110 ;;
111
112 x86_64|x64)
113 CC="x86_64-linux-android$ANDROID_API-clang"
114 CXX="x86_64-linux-android$ANDROID_API-clang++"
115 LD="x86_64-linux-android-ld"
116 AS="x86_64-linux-android-as"
117 AR="x86_64-linux-android-ar"
118 RANLIB="x86_64-linux-android-ranlib"
119 STRIP="x86_64-linux-android-strip"
120
121 CFLAGS="-march=x86-64 -msse4.2 -mpopcnt -mtune=intel -funwind-tables -fexceptions"
122 CXXFLAGS="-march=x86-64 -msse4.2 -mpopcnt -mtune=intel -funwind-tables -fexceptions -frtti"
123 ;;
124
125 *)
126 echo "ERROR: Unknown architecture $ANDROID_CPU"
127 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
128 ;;
129 esac
130
131 #####################################################################
132
133 # Error checking
134 if [ ! -e "$ANDROID_TOOLCHAIN/$CC" ]; then
135 echo "ERROR: Failed to find Android clang. Please edit this script."
136 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
137 fi
138
139 # Error checking
140 if [ ! -e "$ANDROID_TOOLCHAIN/$CXX" ]; then
141 echo "ERROR: Failed to find Android clang++. Please edit this script."
142 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
143 fi
144
145 # Error checking
146 if [ ! -e "$ANDROID_TOOLCHAIN/$RANLIB" ]; then
147 echo "ERROR: Failed to find Android ranlib. Please edit this script."
148 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
149 fi
150
151 # Error checking
152 if [ ! -e "$ANDROID_TOOLCHAIN/$AR" ]; then
153 echo "ERROR: Failed to find Android ar. Please edit this script."
154 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
155 fi
156
157 # Error checking
158 if [ ! -e "$ANDROID_TOOLCHAIN/$AS" ]; then
159 echo "ERROR: Failed to find Android as. Please edit this script."
160 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
161 fi
162
163 # Error checking
164 if [ ! -e "$ANDROID_TOOLCHAIN/$LD" ]; then
165 echo "ERROR: Failed to find Android ld. Please edit this script."
166 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
167 fi
168
169 #####################################################################
170
171 LENGTH=${#ANDROID_TOOLCHAIN}
172 SUBSTR=${PATH:0:$LENGTH}
173 if [ "$SUBSTR" != "$ANDROID_TOOLCHAIN" ]; then
174 export PATH="$ANDROID_TOOLCHAIN:$PATH"
175 fi
176
177 #####################################################################
178
179 export CPP CC CXX LD AS AR RANLIB STRIP
180 export ANDROID_SYSROOT="$AOSP_SYSROOT"
181 export CPPFLAGS="-D__ANDROID_API__=$ANDROID_API"
182 export CFLAGS="$CFLAGS --sysroot=$AOSP_SYSROOT"
183 export CXXFLAGS="$CXXFLAGS -stdlib=libc++ --sysroot=$AOSP_SYSROOT"
184
185 #####################################################################
186
187 echo "ANDROID_TOOLCHAIN: $ANDROID_TOOLCHAIN"
188
189 echo "CPP: $(command -v "$CPP")"
190 echo "CC: $(command -v "$CC")"
191 echo "CXX: $(command -v "$CXX")"
192 echo "LD: $(command -v "$LD")"
193 echo "AS: $(command -v "$AS")"
194 echo "AR: $(command -v "$AR")"
195
196 echo "ANDROID_SYSROOT: $ANDROID_SYSROOT"
197
198 echo "CPPFLAGS: $CPPFLAGS"
199 echo "CFLAGS: $CFLAGS"
200 echo "CXXFLAGS: $CXXFLAGS"
201
202 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 0 || return 0
11 Author: fastrpz@farsightsecurity.com
22 ---
33 diff --git a/Makefile.in b/Makefile.in
4 index a20058cc..495779cc 100644
4 index bac212df..4824927f 100644
55 --- a/Makefile.in
66 +++ b/Makefile.in
77 @@ -23,6 +23,8 @@ CHECKLOCK_SRC=testcode/checklocks.c
1212 +FASTRPZ_OBJ=@FASTRPZ_OBJ@
1313 DNSCRYPT_SRC=@DNSCRYPT_SRC@
1414 DNSCRYPT_OBJ=@DNSCRYPT_OBJ@
15 WITH_PYTHONMODULE=@WITH_PYTHONMODULE@
16 @@ -127,7 +129,7 @@ validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c \
15 WITH_DYNLIBMODULE=@WITH_DYNLIBMODULE@
16 @@ -134,7 +136,7 @@ validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c \
1717 edns-subnet/edns-subnet.c edns-subnet/subnetmod.c \
1818 edns-subnet/addrtree.c edns-subnet/subnet-whitelist.c \
1919 cachedb/cachedb.c cachedb/redis.c respip/respip.c $(CHECKLOCK_SRC) \
2222 COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \
2323 as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \
2424 iter_donotq.lo iter_fwd.lo iter_hints.lo iter_priv.lo iter_resptype.lo \
25 @@ -140,7 +142,7 @@ autotrust.lo val_anchor.lo rpz.lo \
25 @@ -147,7 +149,7 @@ autotrust.lo val_anchor.lo rpz.lo \
2626 validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \
2727 val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo redis.lo authzone.lo \
2828 $(SUBNET_OBJ) $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ) $(DNSCRYPT_OBJ) \
29 -$(IPSECMOD_OBJ) $(IPSET_OBJ) respip.lo
30 +$(FASTRPZ_OBJ) $(IPSECMOD_OBJ) $(IPSET_OBJ) respip.lo
29 -$(IPSECMOD_OBJ) $(IPSET_OBJ) $(DYNLIBMOD_OBJ) respip.lo
30 +$(FASTRPZ_OBJ) $(IPSECMOD_OBJ) $(IPSET_OBJ) $(DYNLIBMOD_OBJ) respip.lo
3131 COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \
3232 outside_network.lo
3333 COMMON_OBJ=$(COMMON_OBJ_WITHOUT_UB_EVENT) ub_event.lo
34 @@ -410,6 +412,11 @@ dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h \
34 @@ -428,6 +430,11 @@ dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h \
3535 $(srcdir)/util/config_file.h $(srcdir)/util/log.h \
3636 $(srcdir)/util/netevent.h
3737
4444 pythonmod.lo pythonmod.o: $(srcdir)/pythonmod/pythonmod.c config.h \
4545 pythonmod/interface.h \
4646 diff --git a/config.h.in b/config.h.in
47 index 78d47fed..e33073e4 100644
47 index f7a4095e..d5a4fa01 100644
4848 --- a/config.h.in
4949 +++ b/config.h.in
50 @@ -1345,4 +1345,11 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
50 @@ -1364,4 +1364,11 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
5151 /** the version of unbound-control that this software implements */
5252 #define UNBOUND_CONTROL_VERSION 1
5353
6161 +/** turn on fastrpz response policy zones */
6262 +#undef ENABLE_FASTRPZ
6363 diff --git a/configure.ac b/configure.ac
64 index 2b91dd3c..e6063d17 100644
64 index 5c373d9d..e45abd89 100644
6565 --- a/configure.ac
6666 +++ b/configure.ac
6767 @@ -6,6 +6,7 @@ sinclude(ax_pthread.m4)
7272 sinclude(dnscrypt/dnscrypt.m4)
7373
7474 # must be numbers. ac_defun because of later processing
75 @@ -1778,6 +1779,9 @@ case "$enable_ipset" in
76 ;;
75 @@ -1819,6 +1820,9 @@ case "$enable_explicit_port_randomisation" in
7776 esac
77
7878
7979 +# check for Fastrpz with fastrpz/rpz.m4
8080 +ck_FASTRPZ
8383 # on openBSD, the implicit rule make $< work.
8484 # on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
8585 diff --git a/daemon/daemon.c b/daemon/daemon.c
86 index 8b0fc348..7ffb9221 100644
86 index 5d427925..f89f1437 100644
8787 --- a/daemon/daemon.c
8888 +++ b/daemon/daemon.c
8989 @@ -91,6 +91,9 @@
9696
9797 #ifdef HAVE_SYSTEMD
9898 #include <systemd/sd-daemon.h>
99 @@ -458,6 +461,14 @@ daemon_create_workers(struct daemon* daemon)
100 dt_apply_cfg(daemon->dtenv, daemon->cfg);
99 @@ -456,6 +459,14 @@ daemon_create_workers(struct daemon* daemon)
100 fatal_exit("dt_create failed");
101101 #else
102102 fatal_exit("dnstap enabled in config but not built with dnstap support");
103103 +#endif
111111 #endif
112112 }
113113 for(i=0; i<daemon->num; i++) {
114 @@ -731,6 +742,9 @@ daemon_cleanup(struct daemon* daemon)
114 @@ -729,6 +740,9 @@ daemon_cleanup(struct daemon* daemon)
115115 #ifdef USE_DNSCRYPT
116116 dnsc_delete(daemon->dnscenv);
117117 daemon->dnscenv = NULL;
138138
139139 /**
140140 diff --git a/daemon/worker.c b/daemon/worker.c
141 index eb7fdf2f..1982228d 100644
141 index 23e3244c..b63d49b7 100644
142142 --- a/daemon/worker.c
143143 +++ b/daemon/worker.c
144144 @@ -76,6 +76,9 @@
151151 #include "sldns/wire2str.h"
152152 #include "util/shm_side/shm_main.h"
153153 #include "dnscrypt/dnscrypt.h"
154 @@ -534,8 +537,27 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
154 @@ -535,8 +538,27 @@ answer_norec_from_cache(struct worker* worker, struct query_info* qinfo,
155155 /* not secure */
156156 secure = 0;
157157 break;
179179 /* return this delegation from the cache */
180180 edns_bak = *edns;
181181 edns->edns_version = EDNS_ADVERTISED_VERSION;
182 @@ -710,6 +732,23 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
182 @@ -711,6 +733,23 @@ answer_from_cache(struct worker* worker, struct query_info* qinfo,
183183 *is_secure_answer = 0;
184184 }
185185 } else *is_secure_answer = 0;
203203
204204 edns_bak = *edns;
205205 edns->edns_version = EDNS_ADVERTISED_VERSION;
206 @@ -1435,6 +1474,15 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
206 @@ -1436,6 +1475,15 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
207207 log_addr(VERB_ALGO, "refused nonrec (cache snoop) query from",
208208 &repinfo->addr, repinfo->addrlen);
209209 goto send_reply;
219219 }
220220
221221 /* If we've found a local alias, replace the qname with the alias
222 @@ -1485,12 +1533,21 @@ lookup_cache:
222 @@ -1486,12 +1534,21 @@ lookup_cache:
223223 h = query_info_hash(lookup_qinfo, sldns_buffer_read_u16_at(c->buffer, 2));
224224 if((e=slabhash_lookup(worker->env.msg_cache, h, lookup_qinfo, 0))) {
225225 /* answer from cache - we have acquired a readlock on it */
243243 /* prefetch it if the prefetch TTL expired.
244244 * Note that if there is more than one pass
245245 * its qname must be that used for cache
246 @@ -1547,11 +1604,19 @@ lookup_cache:
246 @@ -1548,11 +1605,19 @@ lookup_cache:
247247 lock_rw_unlock(&e->lock);
248248 }
249249 if(!LDNS_RD_WIRE(sldns_buffer_begin(c->buffer))) {
266266 }
267267 verbose(VERB_ALGO, "answer norec from cache -- "
268268 diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in
269 index 38c2d298..3b07f392 100644
269 index cd43f04e..b92a1af8 100644
270270 --- a/doc/unbound.conf.5.in
271271 +++ b/doc/unbound.conf.5.in
272 @@ -1828,6 +1828,81 @@ List domain for which the AAAA records are ignored and the A record is
272 @@ -1878,6 +1878,81 @@ List domain for which the AAAA records are ignored and the A record is
273273 used by dns64 processing instead. Can be entered multiple times, list a
274274 new domain for which it applies, one per line. Applies also to names
275275 underneath the name given.
28872887 + fi
28882888 +])
28892889 diff --git a/iterator/iterator.c b/iterator/iterator.c
2890 index 1e0113a8..2fcbf547 100644
2890 index 23b07ea9..c3d31a33 100644
28912891 --- a/iterator/iterator.c
28922892 +++ b/iterator/iterator.c
28932893 @@ -68,6 +68,9 @@
29002900
29012901 /* in msec */
29022902 int UNKNOWN_SERVER_NICENESS = 376;
2903 @@ -555,6 +558,23 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq,
2903 @@ -563,6 +566,23 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq,
29042904 if(ntohs(r->rk.type) == LDNS_RR_TYPE_CNAME &&
29052905 query_dname_compare(*mname, r->rk.dname) == 0 &&
29062906 !iter_find_rrset_in_prepend_answer(iq, r)) {
29242924 /* Add this relevant CNAME rrset to the prepend list.*/
29252925 if(!iter_add_prepend_answer(qstate, iq, r))
29262926 return 0;
2927 @@ -563,6 +583,9 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq,
2927 @@ -571,6 +591,9 @@ handle_cname_response(struct module_qstate* qstate, struct iter_qstate* iq,
29282928
29292929 /* Other rrsets in the section are ignored. */
29302930 }
29342934 /* add authority rrsets to authority prepend, for wildcarded CNAMEs */
29352935 for(i=msg->rep->an_numrrsets; i<msg->rep->an_numrrsets +
29362936 msg->rep->ns_numrrsets; i++) {
2937 @@ -1199,6 +1222,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
2937 @@ -1231,6 +1254,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
29382938 uint8_t* delname;
29392939 size_t delnamelen;
29402940 struct dns_msg* msg = NULL;
29422942
29432943 log_query_info(VERB_DETAIL, "resolving", &qstate->qinfo);
29442944 /* check effort */
2945 @@ -1285,8 +1309,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
2945 @@ -1317,8 +1341,7 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
29462946 }
29472947 if(msg) {
29482948 /* handle positive cache response */
29522952 if(verbosity >= VERB_ALGO) {
29532953 log_dns_msg("msg from cache lookup", &msg->qinfo,
29542954 msg->rep);
2955 @@ -1294,7 +1317,22 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
2955 @@ -1326,7 +1349,22 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
29562956 (int)msg->rep->ttl,
29572957 (int)msg->rep->prefetch_ttl);
29582958 }
29752975 if(type == RESPONSE_TYPE_CNAME) {
29762976 uint8_t* sname = 0;
29772977 size_t slen = 0;
2978 @@ -2718,6 +2756,62 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
2978 @@ -2801,6 +2839,62 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
29792979 sock_list_insert(&qstate->reply_origin,
29802980 &qstate->reply->addr, qstate->reply->addrlen,
29812981 qstate->region);
30383038 if(iq->minimisation_state != DONOT_MINIMISE_STATE
30393039 && !(iq->chase_flags & BIT_RD)) {
30403040 if(FLAGS_GET_RCODE(iq->response->rep->flags) !=
3041 @@ -3471,12 +3565,44 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq,
3041 @@ -3563,12 +3657,44 @@ processFinished(struct module_qstate* qstate, struct iter_qstate* iq,
30423042 * but only if we did recursion. The nonrecursion referral
30433043 * from cache does not need to be stored in the msg cache. */
30443044 if(!qstate->no_cache_store && qstate->query_flags&BIT_RD) {
30843084 qstate->return_msg = iq->response;
30853085 return 0;
30863086 diff --git a/iterator/iterator.h b/iterator/iterator.h
3087 index a2f1b570..e1e4a738 100644
3087 index 342ac207..49b0ecdd 100644
30883088 --- a/iterator/iterator.h
30893089 +++ b/iterator/iterator.h
3090 @@ -386,6 +386,16 @@ struct iter_qstate {
3090 @@ -396,6 +396,16 @@ struct iter_qstate {
30913091 */
30923092 int minimise_count;
30933093
31033103 +
31043104 /**
31053105 * Count number of time-outs. Used to prevent resolving failures when
3106 * the QNAME minimisation QTYPE is blocked. */
3106 * the QNAME minimisation QTYPE is blocked. Used to determine if
31073107 diff --git a/services/cache/dns.c b/services/cache/dns.c
3108 index 2a5bca4a..6de8863a 100644
3108 index 7b6e142c..6d7449f5 100644
31093109 --- a/services/cache/dns.c
31103110 +++ b/services/cache/dns.c
3111 @@ -967,6 +967,14 @@ dns_cache_store(struct module_env* env, struct query_info* msgqinf,
3111 @@ -969,6 +969,14 @@ dns_cache_store(struct module_env* env, struct query_info* msgqinf,
31123112 struct regional* region, uint32_t flags)
31133113 {
31143114 struct reply_info* rep = NULL;
31243124 rep = reply_info_copy(msgrep, env->alloc, NULL);
31253125 if(!rep)
31263126 diff --git a/services/mesh.c b/services/mesh.c
3127 index 9114ef4c..3dc518e5 100644
3127 index 4b0c5db4..eb9cfa5b 100644
31283128 --- a/services/mesh.c
31293129 +++ b/services/mesh.c
31303130 @@ -61,6 +61,9 @@
31373137 #include "respip/respip.h"
31383138 #include "services/listen_dnsport.h"
31393139
3140 @@ -1195,6 +1198,13 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
3140 @@ -1207,6 +1210,13 @@ mesh_send_reply(struct mesh_state* m, int rcode, struct reply_info* rep,
31413141 else secure = 0;
31423142 if(!rep && rcode == LDNS_RCODE_NOERROR)
31433143 rcode = LDNS_RCODE_SERVFAIL;
31513151 /* send the reply */
31523152 /* We don't reuse the encoded answer if either the previous or current
31533153 * response has a local alias. We could compare the alias records
3154 @@ -1415,6 +1425,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
3154 @@ -1434,6 +1444,7 @@ struct mesh_state* mesh_area_find(struct mesh_area* mesh,
31553155 key.s.is_valrec = valrec;
31563156 key.s.qinfo = *qinfo;
31573157 key.s.query_flags = qflags;
31593159 /* We are searching for a similar mesh state when we DO want to
31603160 * aggregate the state. Thus unique is set to NULL. (default when we
31613161 * desire aggregation).*/
3162 @@ -1461,6 +1472,10 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
3162 @@ -1480,6 +1491,10 @@ int mesh_state_add_reply(struct mesh_state* s, struct edns_data* edns,
31633163 if(!r)
31643164 return 0;
31653165 r->query_reply = *rep;
31713171 if(edns->opt_list) {
31723172 r->edns.opt_list = edns_opt_copy_region(edns->opt_list,
31733173 diff --git a/util/config_file.c b/util/config_file.c
3174 index 52ca5a18..0660248f 100644
3174 index 0e9ee471..a5fd72e0 100644
31753175 --- a/util/config_file.c
31763176 +++ b/util/config_file.c
3177 @@ -1460,6 +1460,8 @@ config_delete(struct config_file* cfg)
3178 free(cfg->dnstap_socket_path);
3177 @@ -1495,6 +1495,8 @@ config_delete(struct config_file* cfg)
3178 free(cfg->dnstap_tls_client_cert_file);
31793179 free(cfg->dnstap_identity);
31803180 free(cfg->dnstap_version);
31813181 + if (cfg->rpz_cstr)
31843184 config_deldblstrlist(cfg->ratelimit_below_domain);
31853185 config_delstrlist(cfg->python_script);
31863186 diff --git a/util/config_file.h b/util/config_file.h
3187 index 8739ca2a..a2dcf215 100644
3187 index 66e5025d..504f4f92 100644
31883188 --- a/util/config_file.h
31893189 +++ b/util/config_file.h
3190 @@ -499,6 +499,11 @@ struct config_file {
3190 @@ -522,6 +522,11 @@ struct config_file {
31913191 /** true to disable DNSSEC lameness check in iterator */
31923192 int disable_dnssec_lame_check;
31933193
32003200 int ip_ratelimit;
32013201 /** number of slabs for ip_ratelimit cache */
32023202 diff --git a/util/configlexer.lex b/util/configlexer.lex
3203 index deedffa5..301458a3 100644
3203 index 83cea4b9..9a7feea4 100644
32043204 --- a/util/configlexer.lex
32053205 +++ b/util/configlexer.lex
3206 @@ -446,6 +446,10 @@ dnstap-log-forwarder-query-messages{COLON} {
3206 @@ -467,6 +467,10 @@ dnstap-log-forwarder-query-messages{COLON} {
32073207 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
32083208 dnstap-log-forwarder-response-messages{COLON} {
32093209 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
32153215 ip-ratelimit{COLON} { YDVAR(1, VAR_IP_RATELIMIT) }
32163216 ratelimit{COLON} { YDVAR(1, VAR_RATELIMIT) }
32173217 diff --git a/util/configparser.y b/util/configparser.y
3218 index d471babe..cb6b1d63 100644
3218 index fe600a99..ce43390f 100644
32193219 --- a/util/configparser.y
32203220 +++ b/util/configparser.y
3221 @@ -125,6 +125,7 @@ extern struct config_parser_state* cfg_parser;
3221 @@ -128,6 +128,7 @@ extern struct config_parser_state* cfg_parser;
32223222 %token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES
32233223 %token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES
32243224 %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES
32253225 +%token VAR_RPZ VAR_RPZ_ENABLE VAR_RPZ_ZONE VAR_RPZ_OPTION
32263226 %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA
32273227 %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT
3228 %token VAR_DISABLE_DNSSEC_LAME_CHECK
3229 @@ -173,7 +174,7 @@ extern struct config_parser_state* cfg_parser;
3228 %token VAR_IP_DSCP
3229 @@ -179,7 +180,7 @@ extern struct config_parser_state* cfg_parser;
32303230
32313231 %%
32323232 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
32353235 forwardstart contents_forward | pythonstart contents_py |
32363236 rcstart contents_rc | dtstart contents_dt | viewstart contents_view |
32373237 dnscstart contents_dnsc | cachedbstart contents_cachedb |
3238 @@ -2837,6 +2838,50 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES
3238 @@ -2939,6 +2940,50 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES
32393239 free($2);
32403240 }
32413241 ;
33833383
33843384 /**
33853385 diff --git a/util/netevent.c b/util/netevent.c
3386 index 9fe5da2d..037e70d1 100644
3386 index 3e7a433e..f20d806f 100644
33873387 --- a/util/netevent.c
33883388 +++ b/util/netevent.c
33893389 @@ -57,6 +57,9 @@
33963396
33973397 /* -------- Start of local definitions -------- */
33983398 /** if CMSG_ALIGN is not defined on this platform, a workaround */
3399 @@ -590,6 +593,9 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg)
3399 @@ -596,6 +599,9 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg)
34003400 struct cmsghdr* cmsg;
34013401 #endif /* S_SPLINT_S */
34023402
34063406 rep.c = (struct comm_point*)arg;
34073407 log_assert(rep.c->type == comm_udp);
34083408
3409 @@ -679,6 +685,9 @@ comm_point_udp_callback(int fd, short event, void* arg)
3409 @@ -685,6 +691,9 @@ comm_point_udp_callback(int fd, short event, void* arg)
34103410 int i;
34113411 struct sldns_buffer *buffer;
34123412
34163416 rep.c = (struct comm_point*)arg;
34173417 log_assert(rep.c->type == comm_udp);
34183418
3419 @@ -722,6 +731,9 @@ comm_point_udp_callback(int fd, short event, void* arg)
3419 @@ -728,6 +737,9 @@ comm_point_udp_callback(int fd, short event, void* arg)
34203420 (void)comm_point_send_udp_msg(rep.c, buffer,
34213421 (struct sockaddr*)&rep.addr, rep.addrlen);
34223422 }
34263426 if(!rep.c || rep.c->fd != fd) /* commpoint closed to -1 or reused for
34273427 another UDP port. Note rep.c cannot be reused with TCP fd. */
34283428 break;
3429 @@ -3192,6 +3204,9 @@ comm_point_send_reply(struct comm_reply *repinfo)
3429 @@ -3175,6 +3187,9 @@ comm_point_send_reply(struct comm_reply *repinfo)
34303430 repinfo->c->tcp_timeout_msec);
34313431 }
34323432 }
34363436 }
34373437
34383438 void
3439 @@ -3201,6 +3216,9 @@ comm_point_drop_reply(struct comm_reply* repinfo)
3439 @@ -3184,6 +3199,9 @@ comm_point_drop_reply(struct comm_reply* repinfo)
34403440 return;
34413441 log_assert(repinfo->c);
34423442 log_assert(repinfo->c->type != comm_tcp_accept);
34463446 if(repinfo->c->type == comm_udp)
34473447 return;
34483448 if(repinfo->c->tcp_req_info)
3449 @@ -3222,6 +3240,9 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec)
3449 @@ -3205,6 +3223,9 @@ comm_point_start_listening(struct comm_point* c, int newfd, int msec)
34503450 {
34513451 verbose(VERB_ALGO, "comm point start listening %d (%d msec)",
34523452 c->fd==-1?newfd:c->fd, msec);
34573457 /* no use to start listening no free slots. */
34583458 return;
34593459 diff --git a/util/netevent.h b/util/netevent.h
3460 index d80c72b3..0233292f 100644
3460 index bb2cd1e5..666067e8 100644
34613461 --- a/util/netevent.h
34623462 +++ b/util/netevent.h
34633463 @@ -120,6 +120,10 @@ struct comm_reply {
0 #### iPhoneOS/iOS
1 #
2 # It takes recent enough Xcode to use following two targets. It shouldn't
3 # be a problem by now, but if they don't work, original targets below
4 # that depend on manual definition of environment variables should still
5 # work...
6 #
7 my %targets = (
8 "ios-common" => {
9 template => 1,
10 inherit_from => [ "darwin-common" ],
11 sys_id => "iOS",
12 disable => [ "engine", "async" ],
13 },
14 "ios-xcrun" => {
15 inherit_from => [ "ios-common", asm("armv4_asm") ],
16 bn_ops => [ "BN_LLONG", "RC4_CHAR" ],
17 perlasm_scheme => "ios32",
18 },
19 "ios64-xcrun" => {
20 inherit_from => [ "ios-common", asm("aarch64_asm") ],
21 bn_ops => [ "SIXTY_FOUR_BIT_LONG", "RC4_CHAR" ],
22 perlasm_scheme => "ios64",
23 },
24 "iossimulator-xcrun" => {
25 inherit_from => [ "ios-common" ],
26 },
27
28 "iphoneos-cross" => {
29 inherit_from => [ "ios-common" ],
30 cflags => add("-Wall -fno-common"),
31 },
32 "ios-cross" => {
33 inherit_from => [ "ios-xcrun" ],
34 cflags => add("-Wall -fno-common"),
35 },
36 "ios64-cross" => {
37 inherit_from => [ "ios64-xcrun" ],
38 cflags => add("-Wall -fno-common"),
39 },
40 );
0 #!/usr/bin/env bash
1
2 echo "Downloading Expat"
3 if ! curl -L -k -s -o expat-2.2.9.tar.gz https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.gz;
4 then
5 echo "Failed to download Expat"
6 exit 1
7 fi
8
9 echo "Unpacking Expat"
10 rm -rf ./expat-2.2.9
11 if ! tar -xf expat-2.2.9.tar.gz;
12 then
13 echo "Failed to unpack Expat"
14 exit 1
15 fi
16
17 cd expat-2.2.9 || exit 1
18
19 export PKG_CONFIG_PATH="$IOS_PREFIX/lib/pkgconfig"
20
21 echo "Configuring Expat"
22 if ! ./configure \
23 --build="$AUTOTOOLS_BUILD" --host="$AUTOTOOLS_HOST" \
24 --prefix="$IOS_PREFIX" ; then
25 echo "Error: Failed to configure Expat"
26 cat config.log
27 exit 1
28 fi
29
30 # Cleanup warnings, https://github.com/libexpat/libexpat/issues/383
31 echo "Fixing Makefiles"
32 (IFS="" find "$PWD" -name 'Makefile' -print | while read -r file
33 do
34 cp -p "$file" "$file.fixed"
35 sed 's|-Wduplicated-cond ||g; s|-Wduplicated-branches ||g; s|-Wlogical-op ||g' "$file" > "$file.fixed"
36 mv "$file.fixed" "$file"
37
38 cp -p "$file" "$file.fixed"
39 sed 's|-Wrestrict ||g; s|-Wjump-misses-init ||g; s|-Wmisleading-indentation ||g' "$file" > "$file.fixed"
40 mv "$file.fixed" "$file"
41 done)
42
43 echo "Building Expat"
44 if ! make; then
45 echo "Failed to build Expat"
46 exit 1
47 fi
48
49 echo "Installing Expat"
50 if ! make install; then
51 echo "Failed to install Expat"
52 exit 1
53 fi
54
55 exit 0
0 #!/usr/bin/env bash
1
2 echo "Downloading OpenSSL"
3 if ! curl -L -k -s -o openssl-1.1.1d.tar.gz https://www.openssl.org/source/openssl-1.1.1d.tar.gz;
4 then
5 echo "Failed to download OpenSSL"
6 exit 1
7 fi
8
9 echo "Unpacking OpenSSL"
10 rm -rf ./openssl-1.1.1d
11 if ! tar -xf openssl-1.1.1d.tar.gz;
12 then
13 echo "Failed to unpack OpenSSL"
14 exit 1
15 fi
16
17 cd openssl-1.1.1d || exit 1
18
19 if ! cp ../contrib/ios/15-ios.conf Configurations/; then
20 echo "Failed to copy OpenSSL ios config"
21 exit 1
22 fi
23
24 # OpenSSL 1.1.1d patch. OK to remove once OpenSSL version is bumped.
25 # ocsp.c:947:23: error: 'fork' is unavailable: not available on tvOS and watchOS.
26 # Also see https://github.com/openssl/openssl/issues/7607.
27 if ! patch -u -p0 < ../contrib/ios/openssl.patch; then
28 echo "Failed to patch OpenSSL"
29 exit 1
30 fi
31
32 echo "Configuring OpenSSL"
33 if ! ./Configure "$OPENSSL_HOST" -DNO_FORK no-comp no-asm no-hw no-engine no-tests no-unit-test \
34 --prefix="$IOS_PREFIX" --openssldir="$IOS_PREFIX"; then
35 echo "Failed to configure OpenSSL"
36 exit 1
37 fi
38
39 echo "Building OpenSSL"
40 if ! make; then
41 echo "Failed to build OpenSSL"
42 exit 1
43 fi
44
45 echo "Installing OpenSSL"
46 if ! make install_sw; then
47 echo "Failed to install OpenSSL"
48 exit 1
49 fi
50
51 exit 0
0 #!/usr/bin/env bash
1
2 # This step should install tools needed for all packages - OpenSSL, Expat and Unbound
3 echo "Updating tools"
4 brew update 1>/dev/null
5 echo "Installing tools"
6 # already installed are: autoconf automake libtool pkg-config
7 brew install curl perl 1>/dev/null
0 --- apps/speed.c
1 +++ apps/speed.c
2 @@ -99,6 +99,13 @@
3 #endif
4 #include <openssl/modes.h>
5
6 +/* fork() breaks AppleTVOS, WatchOS, AppleTVSimulator and WatchSimulator */
7 +/* Users should configure with -DNO_FORK */
8 +#if defined(NO_FORK)
9 +# undef HAVE_FORK
10 +# define HAVE_FORK 0
11 +#endif
12 +
13 #ifndef HAVE_FORK
14 # if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_VXWORKS)
15 # define HAVE_FORK 0
16 @@ -110,6 +117,7 @@
17 #if HAVE_FORK
18 # undef NO_FORK
19 #else
20 +# undef NO_FORK
21 # define NO_FORK
22 #endif
23
24 --- apps/ocsp.c
25 +++ apps/ocsp.c
26 @@ -36,6 +36,13 @@
27 # include <openssl/x509v3.h>
28 # include <openssl/rand.h>
29
30 +/* fork() breaks AppleTVOS, WatchOS, AppleTVSimulator and WatchSimulator */
31 +/* Users should configure with -DNO_FORK */
32 +#if defined(NO_FORK)
33 +# undef HAVE_FORK
34 +# define HAVE_FORK 0
35 +#endif
36 +
37 #ifndef HAVE_FORK
38 # if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_WINDOWS)
39 # define HAVE_FORK 0
40 @@ -47,6 +54,7 @@
41 #if HAVE_FORK
42 # undef NO_FORK
43 #else
44 +# undef NO_FORK
45 # define NO_FORK
46 #endif
47
0 #!/usr/bin/env bash
1
2 # ====================================================================
3 # Sets the cross compile environment for Xcode/iOS
4 #
5 # Based upon OpenSSL's setenv-ios.sh by TH, JW, and SM.
6 # Heavily modified by JWW for Crypto++.
7 # Modified by JWW for Unbound.
8 # ====================================================================
9
10 #########################################
11 ##### Some validation #####
12 #########################################
13
14 # In the past we could mostly infer arch or cpu from the SDK (and
15 # mostly vice-versa). Nowadays we need it set for us because Apple
16 # platforms can be either 32-bit or 64-bit.
17
18 if [ -z "$IOS_SDK" ]; then
19 echo "IOS_SDK is not set. Please set it"
20 [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1
21 fi
22
23 if [ -z "$IOS_CPU" ]; then
24 echo "IOS_CPU is not set. Please set it"
25 [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1
26 fi
27
28 # cryptest-ios.sh may run this script without sourcing.
29 if [ "$0" = "${BASH_SOURCE[0]}" ]; then
30 echo "setenv-ios.sh is usually sourced, but not this time."
31 fi
32
33 #########################################
34 ##### Small Fixups, if needed #####
35 #########################################
36
37 if [[ "$IOS_SDK" == "iPhone" ]]; then
38 IOS_SDK=iPhoneOS
39 fi
40
41 if [[ "$IOS_SDK" == "iPhoneOSSimulator" ]]; then
42 IOS_SDK=iPhoneSimulator
43 fi
44
45 if [[ "$IOS_SDK" == "TV" || "$IOS_SDK" == "AppleTV" ]]; then
46 IOS_SDK=AppleTVOS
47 fi
48
49 if [[ "$IOS_SDK" == "Watch" || "$IOS_SDK" == "AppleWatch" ]]; then
50 IOS_SDK=WatchOS
51 fi
52
53 if [[ "$IOS_CPU" == "aarch64" || "$IOS_CPU" == "armv8"* ]] ; then
54 IOS_CPU=arm64
55 fi
56
57 ########################################
58 ##### Environment #####
59 ########################################
60
61 # The flags below were tested with Xcode 8 on Travis. If
62 # you use downlevel versions of Xcode, then you can push
63 # xxx-version-min=n lower. For example, Xcode 6 can use
64 # -miphoneos-version-min=5.
65
66 # iPhones can be either 32-bit or 64-bit
67 if [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "armv7"* ]]; then
68 MIN_VER=-miphoneos-version-min=6
69 elif [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "arm64" ]]; then
70 MIN_VER=-miphoneos-version-min=6
71
72 # Fixups for convenience
73 elif [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "i386" ]]; then
74 IOS_SDK=iPhoneSimulator
75 # MIN_VER=-miphoneos-version-min=6
76 MIN_VER=-miphonesimulator-version-min=6
77 elif [[ "$IOS_SDK" == "iPhoneOS" && "$IOS_CPU" == "x86_64" ]]; then
78 IOS_SDK=iPhoneSimulator
79 # MIN_VER=-miphoneos-version-min=6
80 MIN_VER=-miphonesimulator-version-min=6
81
82 # Simulator builds
83 elif [[ "$IOS_SDK" == "iPhoneSimulator" && "$IOS_CPU" == "i386" ]]; then
84 MIN_VER=-miphonesimulator-version-min=6
85 elif [[ "$IOS_SDK" == "iPhoneSimulator" && "$IOS_CPU" == "x86_64" ]]; then
86 MIN_VER=-miphonesimulator-version-min=6
87
88 # Apple TV can be 32-bit Intel (1st gen), 32-bit ARM (2nd, 3rd gen) or 64-bit ARM (4th gen)
89 elif [[ "$IOS_SDK" == "AppleTVOS" && "$IOS_CPU" == "i386" ]]; then
90 MIN_VER=-mappletvos-version-min=6
91 elif [[ "$IOS_SDK" == "AppleTVOS" && "$IOS_CPU" == "armv7"* ]]; then
92 MIN_VER=-mappletvos-version-min=6
93 elif [[ "$IOS_SDK" == "AppleTVOS" && "$IOS_CPU" == "arm64" ]]; then
94 MIN_VER=-mappletvos-version-min=6
95
96 # Simulator builds
97 elif [[ "$IOS_SDK" == "AppleTVSimulator" && "$IOS_CPU" == "i386" ]]; then
98 MIN_VER=-mappletvsimulator-version-min=6
99 elif [[ "$IOS_SDK" == "AppleTVSimulator" && "$IOS_CPU" == "x86_64" ]]; then
100 MIN_VER=-mappletvsimulator-version-min=6
101
102 # Watch can be either 32-bit or 64-bit ARM. TODO: figure out which
103 # -mwatchos-version-min=n is needed for arm64. 9 is not enough.
104 elif [[ "$IOS_SDK" == "WatchOS" && "$IOS_CPU" == "armv7"* ]]; then
105 MIN_VER=-mwatchos-version-min=6
106 elif [[ "$IOS_SDK" == "WatchOS" && "$IOS_CPU" == "arm64" ]]; then
107 MIN_VER=-mwatchos-version-min=10
108
109 # Simulator builds. TODO: figure out which -watchos-version-min=n
110 # is needed for arm64. 6 compiles and links, but is it correct?
111 elif [[ "$IOS_SDK" == "WatchSimulator" && "$IOS_CPU" == "i386" ]]; then
112 MIN_VER=-mwatchsimulator-version-min=6
113 elif [[ "$IOS_SDK" == "WatchSimulator" && "$IOS_CPU" == "x86_64" ]]; then
114 MIN_VER=-mwatchsimulator-version-min=6
115
116 # And the final catch-all
117 else
118 echo "IOS_SDK and IOS_CPU are not valid. Please fix them"
119 [[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1
120 fi
121
122 #####################################################################
123
124 # Xcode 6 and below cannot handle -miphonesimulator-version-min
125 # Fix it so the simulator will compile as expected. This trick
126 # may work on other SDKs, but it was not tested.
127
128 if [ -n "$(command -v xcodebuild 2>/dev/null)" ]; then
129 # Output of xcodebuild is similar to "Xcode 6.2". The first cut gets
130 # the dotted decimal value. The second cut gets the major version.
131 XCODE_VERSION=$(xcodebuild -version 2>/dev/null | head -n 1 | cut -f2 -d" " | cut -f1 -d".")
132 if [ -z "$XCODE_VERSION" ]; then XCODE_VERSION=100; fi
133
134 if [ "$XCODE_VERSION" -le 6 ]; then
135 MIN_VER="${MIN_VER//iphonesimulator/iphoneos}"
136 fi
137 fi
138
139 #####################################################################
140
141 # Allow a user override? I think we should be doing this. The use case is,
142 # move /Applications/Xcode somewhere else for a side-by-side installation.
143 if [ -z "${XCODE_DEVELOPER-}" ]; then
144 XCODE_DEVELOPER=$(xcode-select -print-path 2>/dev/null)
145 fi
146
147 if [ ! -d "$XCODE_DEVELOPER" ]; then
148 echo "ERROR: unable to find XCODE_DEVELOPER directory."
149 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
150 fi
151
152 # XCODE_DEVELOPER_SDK is the SDK location.
153 XCODE_DEVELOPER_SDK="$XCODE_DEVELOPER/Platforms/$IOS_SDK.platform"
154
155 if [ ! -d "$XCODE_DEVELOPER_SDK" ]; then
156 echo "ERROR: unable to find XCODE_DEVELOPER_SDK directory."
157 echo " Is the SDK supported by Xcode and installed?"
158 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
159 fi
160
161 # XCODE_TOOLCHAIN is the location of the actual compiler tools.
162 if [ -d "$XCODE_DEVELOPER/Toolchains/XcodeDefault.xctoolchain/usr/bin/" ]; then
163 XCODE_TOOLCHAIN="$XCODE_DEVELOPER/Toolchains/XcodeDefault.xctoolchain/usr/bin/"
164 elif [ -d "$XCODE_DEVELOPER_SDK/Developer/usr/bin/" ]; then
165 XCODE_TOOLCHAIN="$XCODE_DEVELOPER_SDK/Developer/usr/bin/"
166 fi
167
168 if [ -z "$XCODE_TOOLCHAIN" ] || [ ! -d "$XCODE_TOOLCHAIN" ]; then
169 echo "ERROR: unable to find Xcode cross-compiler tools."
170 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
171 fi
172
173 # XCODE_SDK is the SDK name/version being used - adjust the list as appropriate.
174 # For example, remove 4.3, 6.2, and 6.1 if they are not installed. We go back to
175 # the 1.0 SDKs because Apple WatchOS uses low numbers, like 2.0 and 2.1.
176 XCODE_SDK=
177 for i in $(seq -f "%.1f" 30.0 -0.1 1.0)
178 do
179 if [ -d "$XCODE_DEVELOPER_SDK/Developer/SDKs/$IOS_SDK$i.sdk" ]; then
180 XCODE_SDK="$IOS_SDK$i.sdk"
181 break
182 fi
183 done
184
185 # Error checking
186 if [ -z "$XCODE_SDK" ]; then
187 echo "ERROR: unable to find a SDK."
188 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
189 fi
190
191 IOS_SYSROOT="$XCODE_DEVELOPER_SDK/Developer/SDKs/$XCODE_SDK"
192
193 if [ -z "$IOS_SYSROOT" ] || [ ! -d "$IOS_SYSROOT" ]; then
194 echo "ERROR: unable to find IOS_SYSROOT directory."
195 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
196 fi
197
198 #####################################################################
199
200 # We want to set AR=libtool and ARFLAGS="-static -o",
201 # but I am not sure Autotools can handle it.
202 CPP=cpp; CC=clang; CXX=clang++; LD=ld
203 AS=as; AR=ar; RANLIB=ranlib; STRIP=strip
204
205 # Error checking
206 if [ ! -e "$XCODE_TOOLCHAIN/$CC" ]; then
207 echo "ERROR: Failed to find iOS clang. Please edit this script."
208 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
209 fi
210
211 # Error checking
212 if [ ! -e "$XCODE_TOOLCHAIN/$CXX" ]; then
213 echo "ERROR: Failed to find iOS clang++. Please edit this script."
214 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
215 fi
216
217 # Error checking
218 if [ ! -e "$XCODE_TOOLCHAIN/$RANLIB" ]; then
219 echo "ERROR: Failed to find iOS ranlib. Please edit this script."
220 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
221 fi
222
223 # Error checking
224 if [ ! -e "$XCODE_TOOLCHAIN/$AR" ]; then
225 echo "ERROR: Failed to find iOS ar. Please edit this script."
226 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
227 fi
228
229 # Error checking
230 if [ ! -e "$XCODE_TOOLCHAIN/$AS" ]; then
231 echo "ERROR: Failed to find iOS as. Please edit this script."
232 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
233 fi
234
235 # Error checking
236 if [ ! -e "$XCODE_TOOLCHAIN/$LD" ]; then
237 echo "ERROR: Failed to find iOS ld. Please edit this script."
238 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 1 || return 1
239 fi
240
241 #####################################################################
242
243 LENGTH=${#XCODE_TOOLCHAIN}
244 SUBSTR=${PATH:0:$LENGTH}
245 if [ "$SUBSTR" != "$XCODE_TOOLCHAIN" ]; then
246 export PATH="$XCODE_TOOLCHAIN":"$PATH"
247 fi
248
249 #####################################################################
250
251 export CPP CC CXX LD AS AR RANLIB STRIP
252 export IOS_SYSROOT
253 export CFLAGS="-arch $IOS_CPU $MIN_VER --sysroot=$IOS_SYSROOT"
254 export CXXFLAGS="-arch $IOS_CPU $MIN_VER -stdlib-libc++ --sysroot=$IOS_SYSROOT"
255
256 #####################################################################
257
258 echo "XCODE_TOOLCHAIN: $XCODE_TOOLCHAIN"
259
260 echo "CPP: $(command -v "$CPP")"
261 echo "CC: $(command -v "$CC")"
262 echo "CXX: $(command -v "$CXX")"
263 echo "LD: $(command -v "$LD")"
264 echo "AS: $(command -v "$AS")"
265 echo "AR: $(command -v "$AR")"
266
267 echo "IOS_SYSROOT: $IOS_SYSROOT"
268
269 echo "CPPFLAGS: $CPPFLAGS"
270 echo "CFLAGS: $CFLAGS"
271 echo "CXXFLAGS: $CXXFLAGS"
272
273 [ "$0" = "${BASH_SOURCE[0]}" ] && exit 0 || return 0
66 Description: Library with validating, recursive, and caching DNS resolver
77 URL: http://www.unbound.net
88 Version: @PACKAGE_VERSION@
9 Requires: @PC_CRYPTO_DEPENDENCY@ @PC_LIBEVENT_DEPENDENCY@
10 Requires.private: @PC_PY_DEPENDENCY@ @PC_LIBBSD_DEPENDENCY@
9 Requires.private: @PC_PY_DEPENDENCY@ @PC_LIBBSD_DEPENDENCY@ @PC_CRYPTO_DEPENDENCY@ @PC_LIBEVENT_DEPENDENCY@
1110 Libs: -L${libdir} -lunbound
1211 Libs.private: @SSLLIB@ @LIBS@
1312 Cflags: -I${includedir}
7575 ReadWritePaths=@UNBOUND_RUN_DIR@ @UNBOUND_CHROOT_DIR@
7676
7777 # Below rules are needed when chroot is enabled (usually it's enabled by default).
78 # If chroot is disabled like chrooot: "" then they may be safely removed.
78 # If chroot is disabled like chroot: "" then they may be safely removed.
7979 TemporaryFileSystem=@UNBOUND_CHROOT_DIR@/dev:ro
8080 TemporaryFileSystem=@UNBOUND_CHROOT_DIR@/run:ro
8181 BindReadOnlyPaths=-/run/systemd/notify:@UNBOUND_CHROOT_DIR@/run/systemd/notify
272272 if(res == 0)
273273 return 1;
274274 log_err("rr data [char %d] parse error %s",
275 (int)LDNS_WIREPARSE_OFFSET(res)-13,
275 (int)LDNS_WIREPARSE_OFFSET(res)-2,
276276 sldns_get_errorstr_parse(res));
277277 return 0;
278278 }
450450 fatal_exit("out of memory during daemon init");
451451 if(daemon->cfg->dnstap) {
452452 #ifdef USE_DNSTAP
453 daemon->dtenv = dt_create(daemon->cfg->dnstap_socket_path,
454 (unsigned int)daemon->num);
453 daemon->dtenv = dt_create(daemon->cfg);
455454 if (!daemon->dtenv)
456455 fatal_exit("dt_create failed");
457 dt_apply_cfg(daemon->dtenv, daemon->cfg);
458456 #else
459457 fatal_exit("dnstap enabled in config but not built with dnstap support");
460458 #endif
782780 # endif
783781 # ifdef HAVE_OPENSSL_CONFIG
784782 EVP_cleanup();
785 # if (OPENSSL_VERSION_NUMBER < 0x10100000) && !defined(OPENSSL_NO_ENGINE)
783 # if (OPENSSL_VERSION_NUMBER < 0x10100000) && !defined(OPENSSL_NO_ENGINE) && defined(HAVE_ENGINE_CLEANUP)
786784 ENGINE_cleanup();
787785 # endif
788786 CONF_modules_free();
328328
329329 /* open fd */
330330 fd = create_tcp_accept_sock(res, 1, &noproto, 0,
331 cfg->ip_transparent, 0, cfg->ip_freebind, cfg->use_systemd);
331 cfg->ip_transparent, 0, cfg->ip_freebind, cfg->use_systemd, cfg->ip_dscp);
332332 freeaddrinfo(res);
333333 }
334334
803803 size_t dnscrypt_shared_secret = 0;
804804 size_t dnscrypt_nonce = 0;
805805 #endif /* USE_DNSCRYPT */
806 #ifdef WITH_DYNLIBMODULE
807 size_t dynlib = 0;
808 #endif /* WITH_DYNLIBMODULE */
806809 msg = slabhash_get_mem(daemon->env->msg_cache);
807810 rrset = slabhash_get_mem(&daemon->env->rrset_cache->table);
808811 val = mod_get_mem(&worker->env, "validator");
821824 dnscrypt_nonce = slabhash_get_mem(daemon->dnscenv->nonces_cache);
822825 }
823826 #endif /* USE_DNSCRYPT */
827 #ifdef WITH_DYNLIBMODULE
828 dynlib = mod_get_mem(&worker->env, "dynlib");
829 #endif /* WITH_DYNLIBMODULE */
824830
825831 if(!print_longnum(ssl, "mem.cache.rrset"SQ, rrset))
826832 return 0;
848854 dnscrypt_nonce))
849855 return 0;
850856 #endif /* USE_DNSCRYPT */
857 #ifdef WITH_DYNLIBMODULE
858 if(!print_longnum(ssl, "mem.mod.dynlibmod"SQ, dynlib))
859 return 0;
860 #endif /* WITH_DYNLIBMODULE */
851861 if(!print_longnum(ssl, "mem.streamwait"SQ,
852862 (size_t)s->svr.mem_stream_wait))
853863 return 0;
906916 print_ext(RES* ssl, struct ub_stats_info* s)
907917 {
908918 int i;
909 char nm[16];
919 char nm[32];
910920 const sldns_rr_descriptor* desc;
911921 const sldns_lookup_table* lt;
912922 /* TYPE */
11231133 *res = NULL;
11241134 *len = 0;
11251135 *labs = 0;
1136 if(str[0] == '\0') {
1137 ssl_printf(ssl, "error: this option requires a domain name\n");
1138 return 0;
1139 }
11261140 status = sldns_str2wire_dname_buf(str, nm, &nmlen);
11271141 if(status != 0) {
11281142 ssl_printf(ssl, "error cannot parse name %s at %d: %s\n", str,
8787 # include "nss.h"
8888 #endif
8989
90 #ifdef HAVE_TARGETCONDITIONALS_H
91 #include <TargetConditionals.h>
92 #endif
93
94 #if defined(TARGET_OS_TV) || defined(TARGET_OS_WATCH)
95 #undef HAVE_FORK
96 #endif
97
9098 /** print build options. */
9199 static void
92100 print_build_options(void)
525533 LOGIN_SETALL & ~LOGIN_SETUSER & ~LOGIN_SETGROUP) != 0)
526534 log_warn("unable to setusercontext %s: %s",
527535 cfg->username, strerror(errno));
536 #else
537 (void)pwd;
528538 #endif /* HAVE_SETUSERCONTEXT */
529539 }
530540 #endif /* HAVE_GETPWNAM */
7878 #include "sldns/wire2str.h"
7979 #include "util/shm_side/shm_main.h"
8080 #include "dnscrypt/dnscrypt.h"
81 #include "dnstap/dtstream.h"
8182
8283 #ifdef HAVE_SYS_TYPES_H
8384 # include <sys/types.h>
18061807 worker->back = outside_network_create(worker->base,
18071808 cfg->msg_buffer_size, (size_t)cfg->outgoing_num_ports,
18081809 cfg->out_ifs, cfg->num_out_ifs, cfg->do_ip4, cfg->do_ip6,
1809 cfg->do_tcp?cfg->outgoing_num_tcp:0,
1810 cfg->do_tcp?cfg->outgoing_num_tcp:0, cfg->ip_dscp,
18101811 worker->daemon->env->infra_cache, worker->rndstate,
18111812 cfg->use_caps_bits_for_id, worker->ports, worker->numports,
18121813 cfg->unwanted_threshold, cfg->outgoing_tcp_mss,
18131814 &worker_alloc_cleanup, worker,
18141815 cfg->do_udp || cfg->udp_upstream_without_downstream,
18151816 worker->daemon->connect_sslctx, cfg->delay_close,
1816 dtenv);
1817 cfg->tls_use_sni, dtenv);
18171818 if(!worker->back) {
18181819 log_err("could not create outgoing sockets");
18191820 worker_delete(worker);
19131914 ) {
19141915 auth_xfer_pickup_initial(worker->env.auth_zones, &worker->env);
19151916 }
1917 #ifdef USE_DNSTAP
1918 if(worker->daemon->cfg->dnstap
1919 #ifndef THREADS_DISABLED
1920 && worker->thread_num == 0
1921 #endif
1922 ) {
1923 if(!dt_io_thread_start(dtenv->dtio, comm_base_internal(
1924 worker->base), worker->daemon->num)) {
1925 log_err("could not start dnstap io thread");
1926 worker_delete(worker);
1927 return 0;
1928 }
1929 }
1930 #endif /* USE_DNSTAP */
19161931 if(!worker->env.mesh || !worker->env.scratch_buffer) {
19171932 worker_delete(worker);
19181933 return 0;
19601975 wsvc_desetup_worker(worker);
19611976 #endif /* UB_ON_WINDOWS */
19621977 }
1978 #ifdef USE_DNSTAP
1979 if(worker->daemon->cfg->dnstap
1980 #ifndef THREADS_DISABLED
1981 && worker->thread_num == 0
1982 #endif
1983 ) {
1984 dt_io_thread_stop(worker->dtenv.dtio);
1985 }
1986 dt_deinit(&worker->dtenv);
1987 #endif /* USE_DNSTAP */
19631988 comm_base_delete(worker->base);
19641989 ub_randfree(worker->rndstate);
19651990 alloc_clear(&worker->alloc);
20982123 return 0;
20992124 }
21002125
2126 #ifdef USE_DNSTAP
2127 void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev),
2128 void* ATTR_UNUSED(arg))
2129 {
2130 log_assert(0);
2131 }
2132 #endif
2133
2134 #ifdef USE_DNSTAP
2135 void dtio_mainfdcallback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev),
2136 void* ATTR_UNUSED(arg))
2137 {
2138 log_assert(0);
2139 }
2140 #endif
226226 static const char IPV4_PTR_SUFFIX[] = "\07in-addr\04arpa";
227227 int i;
228228 char* c = ptr;
229 log_assert(nm_len == MAX_PTR_QNAME_IPV4);
229 log_assert(nm_len == MAX_PTR_QNAME_IPV4); (void)nm_len;
230230
231231 for (i = 0; i < 4; ++i) {
232232 *c = uitoa((unsigned int)(ipv4 % 256), c + 1);
4848 #include "util/netevent.h"
4949 #include "util/log.h"
5050
51 #include <fstrm.h>
5251 #include <protobuf-c/protobuf-c.h>
5352
5453 #include "dnstap/dnstap.h"
54 #include "dnstap/dtstream.h"
5555 #include "dnstap/dnstap.pb-c.h"
5656
57 #define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap"
5857 #define DNSTAP_INITIAL_BUF_SIZE 256
5958
6059 struct dt_msg {
8988 static void
9089 dt_send(const struct dt_env *env, void *buf, size_t len_buf)
9190 {
92 fstrm_res res;
93 if (!buf)
94 return;
95 res = fstrm_iothr_submit(env->iothr, env->ioq, buf, len_buf,
96 fstrm_free_wrapper, NULL);
97 if (res != fstrm_res_success)
98 free(buf);
91 dt_msg_queue_submit(env->msgqueue, buf, len_buf);
9992 }
10093
10194 static void
134127 }
135128
136129 struct dt_env *
137 dt_create(const char *socket_path, unsigned num_workers)
138 {
139 #ifdef UNBOUND_DEBUG
140 fstrm_res res;
141 #endif
130 dt_create(struct config_file* cfg)
131 {
142132 struct dt_env *env;
143 struct fstrm_iothr_options *fopt;
144 struct fstrm_unix_writer_options *fuwopt;
145 struct fstrm_writer *fw;
146 struct fstrm_writer_options *fwopt;
147
148 verbose(VERB_OPS, "attempting to connect to dnstap socket %s",
149 socket_path);
150 log_assert(socket_path != NULL);
151 log_assert(num_workers > 0);
152 check_socket_file(socket_path);
133
134 if(cfg->dnstap && cfg->dnstap_socket_path && cfg->dnstap_socket_path[0] &&
135 (cfg->dnstap_ip==NULL || cfg->dnstap_ip[0]==0)) {
136 verbose(VERB_OPS, "attempting to connect to dnstap socket %s",
137 cfg->dnstap_socket_path);
138 check_socket_file(cfg->dnstap_socket_path);
139 }
153140
154141 env = (struct dt_env *) calloc(1, sizeof(struct dt_env));
155142 if (!env)
156143 return NULL;
157144
158 fwopt = fstrm_writer_options_init();
159 #ifdef UNBOUND_DEBUG
160 res =
161 #else
162 (void)
163 #endif
164 fstrm_writer_options_add_content_type(fwopt,
165 DNSTAP_CONTENT_TYPE, sizeof(DNSTAP_CONTENT_TYPE) - 1);
166 log_assert(res == fstrm_res_success);
167
168 fuwopt = fstrm_unix_writer_options_init();
169 fstrm_unix_writer_options_set_socket_path(fuwopt, socket_path);
170
171 fw = fstrm_unix_writer_init(fuwopt, fwopt);
172 log_assert(fw != NULL);
173
174 fopt = fstrm_iothr_options_init();
175 fstrm_iothr_options_set_num_input_queues(fopt, num_workers);
176 env->iothr = fstrm_iothr_init(fopt, &fw);
177 if (env->iothr == NULL) {
178 verbose(VERB_DETAIL, "dt_create: fstrm_iothr_init() failed");
179 fstrm_writer_destroy(&fw);
145 env->dtio = dt_io_thread_create();
146 if(!env->dtio) {
147 log_err("malloc failure");
180148 free(env);
181 env = NULL;
182 }
183 fstrm_iothr_options_destroy(&fopt);
184 fstrm_unix_writer_options_destroy(&fuwopt);
185 fstrm_writer_options_destroy(&fwopt);
186
149 return NULL;
150 }
151 if(!dt_io_thread_apply_cfg(env->dtio, cfg)) {
152 dt_io_thread_delete(env->dtio);
153 free(env);
154 return NULL;
155 }
156 dt_apply_cfg(env, cfg);
187157 return env;
188158 }
189159
271241 int
272242 dt_init(struct dt_env *env)
273243 {
274 env->ioq = fstrm_iothr_get_input_queue(env->iothr);
275 if (env->ioq == NULL)
244 env->msgqueue = dt_msg_queue_create();
245 if(!env->msgqueue) {
246 log_err("malloc failure");
276247 return 0;
248 }
249 if(!dt_io_thread_register_queue(env->dtio, env->msgqueue)) {
250 log_err("malloc failure");
251 dt_msg_queue_delete(env->msgqueue);
252 env->msgqueue = NULL;
253 return 0;
254 }
277255 return 1;
256 }
257
258 void
259 dt_deinit(struct dt_env* env)
260 {
261 dt_io_thread_unregister_queue(env->dtio, env->msgqueue);
262 dt_msg_queue_delete(env->msgqueue);
278263 }
279264
280265 void
282267 {
283268 if (!env)
284269 return;
285 verbose(VERB_OPS, "closing dnstap socket");
286 fstrm_iothr_destroy(&env->iothr);
270 dt_io_thread_delete(env->dtio);
287271 free(env->identity);
288272 free(env->version);
289273 free(env);
3939 #ifdef USE_DNSTAP
4040
4141 struct config_file;
42 struct fstrm_io;
43 struct fstrm_queue;
4442 struct sldns_buffer;
43 struct dt_msg_queue;
4544
4645 struct dt_env {
47 /** dnstap I/O thread */
48 struct fstrm_iothr *iothr;
46 /** the io thread (made by the struct daemon) */
47 struct dt_io_thread* dtio;
4948
50 /** dnstap I/O thread input queue */
51 struct fstrm_iothr_queue *ioq;
49 /** valid in worker struct, not in daemon struct, the per-worker
50 * message list */
51 struct dt_msg_queue* msgqueue;
5252
5353 /** dnstap "identity" field, NULL if disabled */
5454 char *identity;
8383 * of the structure) to ensure lock-free access to its own per-worker circular
8484 * queue. Duplicate the environment object if more than one worker needs to
8585 * share access to the dnstap I/O socket.
86 * @param socket_path: path to dnstap logging socket, must be non-NULL.
87 * @param num_workers: number of worker threads, must be > 0.
86 * @param cfg: with config settings.
8887 * @return dt_env object, NULL on failure.
8988 */
9089 struct dt_env *
91 dt_create(const char *socket_path, unsigned num_workers);
90 dt_create(struct config_file* cfg);
9291
9392 /**
9493 * Apply config settings.
105104 */
106105 int
107106 dt_init(struct dt_env *env);
107
108 /**
109 * Deletes the per-worker state created by dt_init
110 */
111 void dt_deinit(struct dt_env *env);
108112
109113 /**
110114 * Delete dnstap environment object. Closes dnstap I/O socket and deletes all
66 [
77 AC_ARG_ENABLE([dnstap],
88 AS_HELP_STRING([--enable-dnstap],
9 [Enable dnstap support (requires fstrm, protobuf-c)]),
9 [Enable dnstap support (requires protobuf-c)]),
1010 [opt_dnstap=$enableval], [opt_dnstap=no])
1111
1212 AC_ARG_WITH([dnstap-socket-path],
3939 fi
4040 fi
4141 ])
42 AC_ARG_WITH([libfstrm], AC_HELP_STRING([--with-libfstrm=path],
43 [Path where libfstrm is installed, for dnstap]), [
44 CFLAGS="$CFLAGS -I$withval/include"
45 LDFLAGS="$LDFLAGS -L$withval/lib"
46 ])
47 AC_SEARCH_LIBS([fstrm_iothr_init], [fstrm], [],
48 AC_MSG_ERROR([The fstrm library was not found. Please install fstrm!]))
4942 AC_SEARCH_LIBS([protobuf_c_message_pack], [protobuf-c], [],
5043 AC_MSG_ERROR([The protobuf-c library was not found. Please install protobuf-c!]))
5144 $2
0 /*
1 * dnstap/dnstap_fstrm.c - Frame Streams protocol for dnstap
2 *
3 * Copyright (c) 2020, NLnet Labs. All rights reserved.
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NLNET LABS nor the names of its contributors may
19 * be used to endorse or promote products derived from this software without
20 * specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 */
35
36 /**
37 * \file
38 *
39 * Definitions for the Frame Streams data transport protocol for
40 * dnstap message logs.
41 */
42
43 #include "config.h"
44 #include "dnstap/dnstap_fstrm.h"
45 #include "sldns/sbuffer.h"
46 #include "sldns/wire2str.h"
47
48 void* fstrm_create_control_frame_start(char* contenttype, size_t* len)
49 {
50 uint32_t* control;
51 size_t n;
52 /* start framestream message:
53 * 4byte 0: control indicator.
54 * 4byte bigendian: length of control frame
55 * 4byte bigendian: type START
56 * 4byte bigendian: option: content-type
57 * 4byte bigendian: length of string
58 * string of content type (dnstap)
59 */
60 n = 4+4+4+4+4+strlen(contenttype);
61 control = malloc(n);
62 if(!control)
63 return NULL;
64 control[0] = 0;
65 control[1] = htonl(4+4+4+strlen(contenttype));
66 control[2] = htonl(FSTRM_CONTROL_FRAME_START);
67 control[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE);
68 control[4] = htonl(strlen(contenttype));
69 memmove(&control[5], contenttype, strlen(contenttype));
70 *len = n;
71 return control;
72 }
73
74 void* fstrm_create_control_frame_stop(size_t* len)
75 {
76 uint32_t* control;
77 size_t n;
78 /* stop framestream message:
79 * 4byte 0: control indicator.
80 * 4byte bigendian: length of control frame
81 * 4byte bigendian: type STOP
82 */
83 n = 4+4+4;
84 control = malloc(n);
85 if(!control)
86 return NULL;
87 control[0] = 0;
88 control[1] = htonl(4);
89 control[2] = htonl(FSTRM_CONTROL_FRAME_STOP);
90 *len = n;
91 return control;
92 }
93
94 void* fstrm_create_control_frame_ready(char* contenttype, size_t* len)
95 {
96 uint32_t* control;
97 size_t n;
98 /* start bidirectional stream:
99 * 4 bytes 0 escape
100 * 4 bytes bigendian length of frame
101 * 4 bytes bigendian type READY
102 * 4 bytes bigendian frame option content type
103 * 4 bytes bigendian length of string
104 * string of content type.
105 */
106 /* len includes the escape and framelength */
107 n = 4+4+4+4+4+strlen(contenttype);
108 control = malloc(n);
109 if(!control) {
110 return NULL;
111 }
112 control[0] = 0;
113 control[1] = htonl(4+4+4+strlen(contenttype));
114 control[2] = htonl(FSTRM_CONTROL_FRAME_READY);
115 control[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE);
116 control[4] = htonl(strlen(contenttype));
117 memmove(&control[5], contenttype, strlen(contenttype));
118 *len = n;
119 return control;
120 }
121
122 void* fstrm_create_control_frame_accept(char* contenttype, size_t* len)
123 {
124 uint32_t* control;
125 size_t n;
126 /* control frame on reply:
127 * 4 bytes 0 escape
128 * 4 bytes bigendian length of frame
129 * 4 bytes bigendian type ACCEPT
130 * 4 bytes bigendian frame option content type
131 * 4 bytes bigendian length of string
132 * string of content type.
133 */
134 /* len includes the escape and framelength */
135 n = 4+4+4+4+4+strlen(contenttype);
136 control = malloc(n);
137 if(!control) {
138 return NULL;
139 }
140 control[0] = 0;
141 control[1] = htonl(4+4+4+strlen(contenttype));
142 control[2] = htonl(FSTRM_CONTROL_FRAME_ACCEPT);
143 control[3] = htonl(FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE);
144 control[4] = htonl(strlen(contenttype));
145 memmove(&control[5], contenttype, strlen(contenttype));
146 *len = n;
147 return control;
148 }
149
150 void* fstrm_create_control_frame_finish(size_t* len)
151 {
152 uint32_t* control;
153 size_t n;
154 /* control frame on reply:
155 * 4 bytes 0 escape
156 * 4 bytes bigendian length of frame
157 * 4 bytes bigendian type FINISH
158 */
159 /* len includes the escape and framelength */
160 n = 4+4+4;
161 control = malloc(n);
162 if(!control) {
163 return NULL;
164 }
165 control[0] = 0;
166 control[1] = htonl(4);
167 control[2] = htonl(FSTRM_CONTROL_FRAME_FINISH);
168 *len = n;
169 return control;
170 }
171
172 char* fstrm_describe_control(void* pkt, size_t len)
173 {
174 uint32_t frametype = 0;
175 char buf[512];
176 char* str = buf;
177 size_t remain, slen = sizeof(buf);
178 uint8_t* pos;
179
180 buf[0]=0;
181 if(len < 4) {
182 snprintf(buf, sizeof(buf), "malformed control frame, "
183 "too short, len=%u", (unsigned int)len);
184 return strdup(buf);
185 }
186 frametype = sldns_read_uint32(pkt);
187 if(frametype == FSTRM_CONTROL_FRAME_ACCEPT) {
188 (void)sldns_str_print(&str, &slen, "accept");
189 } else if(frametype == FSTRM_CONTROL_FRAME_START) {
190 (void)sldns_str_print(&str, &slen, "start");
191 } else if(frametype == FSTRM_CONTROL_FRAME_STOP) {
192 (void)sldns_str_print(&str, &slen, "stop");
193 } else if(frametype == FSTRM_CONTROL_FRAME_READY) {
194 (void)sldns_str_print(&str, &slen, "ready");
195 } else if(frametype == FSTRM_CONTROL_FRAME_FINISH) {
196 (void)sldns_str_print(&str, &slen, "finish");
197 } else {
198 (void)sldns_str_print(&str, &slen, "type%d", (int)frametype);
199 }
200
201 /* show the content type options */
202 pos = pkt + 4;
203 remain = len - 4;
204 while(remain >= 8) {
205 uint32_t field_type = sldns_read_uint32(pos);
206 uint32_t field_len = sldns_read_uint32(pos+4);
207 if(remain < field_len) {
208 (void)sldns_str_print(&str, &slen, "malformed_field");
209 break;
210 }
211 if(field_type == FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE) {
212 char tempf[512];
213 (void)sldns_str_print(&str, &slen, " content-type(");
214 if(field_len < sizeof(tempf)-1) {
215 memmove(tempf, pos+8, field_len);
216 tempf[field_len] = 0;
217 (void)sldns_str_print(&str, &slen, "%s", tempf);
218 } else {
219 (void)sldns_str_print(&str, &slen, "<error-too-long>");
220 }
221 (void)sldns_str_print(&str, &slen, ")");
222 } else {
223 (void)sldns_str_print(&str, &slen,
224 " field(type %u, length %u)",
225 (unsigned int)field_type,
226 (unsigned int)field_len);
227 }
228 pos += 8 + field_len;
229 remain -= (8 + field_len);
230 }
231 if(remain > 0)
232 (void)sldns_str_print(&str, &slen, " trailing-bytes"
233 "(length %u)", (unsigned int)remain);
234 return strdup(buf);
235 }
0 /*
1 * dnstap/dnstap_fstrm.h - Frame Streams protocol for dnstap
2 *
3 * Copyright (c) 2020, NLnet Labs. All rights reserved.
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NLNET LABS nor the names of its contributors may
19 * be used to endorse or promote products derived from this software without
20 * specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 */
35
36 /**
37 * \file
38 *
39 * Definitions for the Frame Streams data transport protocol for
40 * dnstap message logs.
41 */
42
43 #ifndef DNSTAP_FSTRM_H
44 #define DNSTAP_FSTRM_H
45
46 /* Frame Streams data transfer protocol encode for DNSTAP messages.
47 * The protocol looks to be specified in the libfstrm library.
48 *
49 * Quick writeup for DNSTAP usage, from reading fstrm/control.h eloquent
50 * comments and fstrm/control.c for some bytesize details (the content type
51 * length).
52 *
53 * The Frame Streams can be unidirectional or bi-directional.
54 * bi-directional streams use control frame types READY, ACCEPT and FINISH.
55 * uni-directional streams use control frame types START and STOP.
56 * unknown control frame types should be ignored by the receiver, they
57 * do not change the data frame encoding.
58 *
59 * bi-directional control frames implement a simple handshake protocol
60 * between sender and receiver.
61 *
62 * The uni-directional control frames have one start and one stop frame,
63 * before and after the data. The start frame can have a content type.
64 * The start and stop frames are not optional.
65 *
66 * data frames are preceded by 4byte length, bigendian.
67 * zero length data frames are not possible, they are an escape that
68 * signals the presence of a control frame.
69 *
70 * a control frame consists of 0 value in 4byte bigendian, this is really
71 * the data frame length, with 0 the escape sequence that indicates one
72 * control frame follows.
73 * Then, 4byte bigendian, length of the control frame message.
74 * Then, the control frame payload (of that length). with in it:
75 * 4byte bigendian, control type (eg. START, STOP, READY, ACCEPT, FINISH).
76 * perhaps nothing more (STOP, FINISH), but for other types maybe
77 * control fields
78 * 4byte bigendian, the control-field-type, currently only content-type.
79 * 4byte bigendian, length of the string for this option.
80 * .. bytes of that string.
81 *
82 * The START type can have only one field. Field max len 256.
83 * control frame max frame length 512 (excludes the 0-escape and control
84 * frame length bytes).
85 *
86 * the bidirectional type of transmission is like this:
87 * client sends READY (with content type included),
88 * client waits for ACCEPT (with content type included),
89 * client sends START (with matched content type from ACCEPT)
90 * .. data frames
91 * client sends STOP.
92 * client waits for FINISH frame.
93 *
94 */
95
96 /** max length of Frame Streams content type field string */
97 #define FSTRM_CONTENT_TYPE_LENGTH_MAX 256
98 /** control frame value to denote the control frame ACCEPT */
99 #define FSTRM_CONTROL_FRAME_ACCEPT 0x01
100 /** control frame value to denote the control frame START */
101 #define FSTRM_CONTROL_FRAME_START 0x02
102 /** control frame value to denote the control frame STOP */
103 #define FSTRM_CONTROL_FRAME_STOP 0x03
104 /** control frame value to denote the control frame READY */
105 #define FSTRM_CONTROL_FRAME_READY 0x04
106 /** control frame value to denote the control frame FINISH */
107 #define FSTRM_CONTROL_FRAME_FINISH 0x05
108 /** the constant that denotes the control field type that is the
109 * string for the content type of the stream. */
110 #define FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE 0x01
111 /** the content type for DNSTAP frame streams */
112 #define DNSTAP_CONTENT_TYPE "protobuf:dnstap.Dnstap"
113
114 /**
115 * This creates an FSTRM control frame of type START.
116 * @param contenttype: a zero delimited string with the content type.
117 * eg. use the constant DNSTAP_CONTENT_TYPE, which is defined as
118 * "protobuf:dnstap.Dnstap", for a dnstap frame stream.
119 * @param len: if a buffer is returned this is the length of that buffer.
120 * @return NULL on malloc failure. Returns a malloced buffer with the
121 * protocol message. The buffer starts with the 4 bytes of 0 that indicate
122 * a control frame. The buffer should be sent without preceding it with
123 * the 'len' variable (like data frames are), but straight the content of the
124 * buffer, because the lengths are included in the buffer. This is so that
125 * the zero control indicator can be included before the control frame length.
126 */
127 void* fstrm_create_control_frame_start(char* contenttype, size_t* len);
128
129 /**
130 * This creates an FSTRM control frame of type READY.
131 * @param contenttype: a zero delimited string with the content type.
132 * eg. use the constant DNSTAP_CONTENT_TYPE, which is defined as
133 * "protobuf:dnstap.Dnstap", for a dnstap frame stream.
134 * @param len: if a buffer is returned this is the length of that buffer.
135 * @return NULL on malloc failure. Returns a malloced buffer with the
136 * protocol message. The buffer starts with the 4 bytes of 0 that indicate
137 * a control frame. The buffer should be sent without preceding it with
138 * the 'len' variable (like data frames are), but straight the content of the
139 * buffer, because the lengths are included in the buffer. This is so that
140 * the zero control indicator can be included before the control frame length.
141 */
142 void* fstrm_create_control_frame_ready(char* contenttype, size_t* len);
143
144 /**
145 * This creates an FSTRM control frame of type STOP.
146 * @param len: if a buffer is returned this is the length of that buffer.
147 * @return NULL on malloc failure. Returns a malloced buffer with the
148 * protocol message. The buffer starts with the 4 bytes of 0 that indicate
149 * a control frame. The buffer should be sent without preceding it with
150 * the 'len' variable (like data frames are), but straight the content of the
151 * buffer, because the lengths are included in the buffer. This is so that
152 * the zero control indicator can be included before the control frame length.
153 */
154 void* fstrm_create_control_frame_stop(size_t* len);
155
156 /**
157 * This creates an FSTRM control frame of type ACCEPT.
158 * @param contenttype: a zero delimited string with the content type.
159 * for dnstap streams use DNSTAP_CONTENT_TYPE.
160 * @param len: if a buffer is returned this is the length of that buffer.
161 * @return NULL on malloc failure. Returns a malloced buffer with the
162 * protocol message. The buffer starts with the 4 bytes of 0 that indicate
163 * a control frame. The buffer should be sent without preceding it with
164 * the 'len' variable (like data frames are), but straight the content of the
165 * buffer, because the lengths are included in the buffer. This is so that
166 * the zero control indicator can be included before the control frame length.
167 */
168 void* fstrm_create_control_frame_accept(char* contenttype, size_t* len);
169
170 /**
171 * This creates an FSTRM control frame of type FINISH.
172 * @param len: if a buffer is returned this is the length of that buffer.
173 * @return NULL on malloc failure. Returns a malloced buffer with the
174 * protocol message. The buffer starts with the 4 bytes of 0 that indicate
175 * a control frame. The buffer should be sent without preceding it with
176 * the 'len' variable (like data frames are), but straight the content of the
177 * buffer, because the lengths are included in the buffer. This is so that
178 * the zero control indicator can be included before the control frame length.
179 */
180 void* fstrm_create_control_frame_finish(size_t* len);
181
182 /**
183 * Return string that describes a control packet. For debug, logs.
184 * Like 'start content-type(protobuf:dnstap.Dnstap)' or 'stop'.
185 * @param pkt: the packet data, that is the data after the 4 zero start
186 * bytes and 4 length bytes.
187 * @param len: the length of the control packet data, in pkt. This is the
188 * ntohl of the 4 bytes length preceding the data.
189 * @return zero delimited string, malloced. Or NULL on malloc failure.
190 */
191 char* fstrm_describe_control(void* pkt, size_t len);
192
193 #endif /* DNSTAP_FSTRM_H */
0 /*
1 * dnstap/dtstream.c - Frame Streams thread for unbound DNSTAP
2 *
3 * Copyright (c) 2020, NLnet Labs. All rights reserved.
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NLNET LABS nor the names of its contributors may
19 * be used to endorse or promote products derived from this software without
20 * specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 */
35
36 /**
37 * \file
38 *
39 * An implementation of the Frame Streams data transport protocol for
40 * the Unbound DNSTAP message logging facility.
41 */
42
43 #include "config.h"
44 #include "dnstap/dtstream.h"
45 #include "dnstap/dnstap_fstrm.h"
46 #include "util/config_file.h"
47 #include "util/ub_event.h"
48 #include "util/net_help.h"
49 #include "services/outside_network.h"
50 #include "sldns/sbuffer.h"
51 #ifdef HAVE_SYS_UN_H
52 #include <sys/un.h>
53 #endif
54 #include <fcntl.h>
55 #ifdef HAVE_OPENSSL_SSL_H
56 #include <openssl/ssl.h>
57 #endif
58 #ifdef HAVE_OPENSSL_ERR_H
59 #include <openssl/err.h>
60 #endif
61
62 /** number of messages to process in one output callback */
63 #define DTIO_MESSAGES_PER_CALLBACK 100
64 /** the msec to wait for reconnect (if not immediate, the first attempt) */
65 #define DTIO_RECONNECT_TIMEOUT_MIN 10
66 /** the msec to wait for reconnect max after backoff */
67 #define DTIO_RECONNECT_TIMEOUT_MAX 1000
68 /** the msec to wait for reconnect slow, to stop busy spinning on reconnect */
69 #define DTIO_RECONNECT_TIMEOUT_SLOW 1000
70
71 /** maximum length of received frame */
72 #define DTIO_RECV_FRAME_MAX_LEN 1000
73
74 struct stop_flush_info;
75 /** DTIO command channel commands */
76 enum {
77 /** DTIO command channel stop */
78 DTIO_COMMAND_STOP = 0,
79 /** DTIO command channel wakeup */
80 DTIO_COMMAND_WAKEUP = 1
81 } dtio_channel_command;
82
83 /** open the output channel */
84 static void dtio_open_output(struct dt_io_thread* dtio);
85 /** add output event for read and write */
86 static int dtio_add_output_event_write(struct dt_io_thread* dtio);
87 /** start reconnection attempts */
88 static void dtio_reconnect_enable(struct dt_io_thread* dtio);
89 /** stop from stop_flush event loop */
90 static void dtio_stop_flush_exit(struct stop_flush_info* info);
91 /** setup a start control message */
92 static int dtio_control_start_send(struct dt_io_thread* dtio);
93 #ifdef HAVE_SSL
94 /** enable briefly waiting for a read event, for SSL negotiation */
95 static int dtio_enable_brief_read(struct dt_io_thread* dtio);
96 /** enable briefly waiting for a write event, for SSL negotiation */
97 static int dtio_enable_brief_write(struct dt_io_thread* dtio);
98 #endif
99
100 struct dt_msg_queue*
101 dt_msg_queue_create(void)
102 {
103 struct dt_msg_queue* mq = calloc(1, sizeof(*mq));
104 if(!mq) return NULL;
105 mq->maxsize = 1*1024*1024; /* set max size of buffer, per worker,
106 about 1 M should contain 64K messages with some overhead,
107 or a whole bunch smaller ones */
108 lock_basic_init(&mq->lock);
109 lock_protect(&mq->lock, mq, sizeof(*mq));
110 return mq;
111 }
112
113 /** clear the message list, caller must hold the lock */
114 static void
115 dt_msg_queue_clear(struct dt_msg_queue* mq)
116 {
117 struct dt_msg_entry* e = mq->first, *next=NULL;
118 while(e) {
119 next = e->next;
120 free(e->buf);
121 free(e);
122 e = next;
123 }
124 mq->first = NULL;
125 mq->last = NULL;
126 mq->cursize = 0;
127 }
128
129 void
130 dt_msg_queue_delete(struct dt_msg_queue* mq)
131 {
132 if(!mq) return;
133 lock_basic_destroy(&mq->lock);
134 dt_msg_queue_clear(mq);
135 free(mq);
136 }
137
138 /** make the dtio wake up by sending a wakeup command */
139 static void dtio_wakeup(struct dt_io_thread* dtio)
140 {
141 uint8_t cmd = DTIO_COMMAND_WAKEUP;
142 if(!dtio) return;
143 if(!dtio->started) return;
144
145 while(1) {
146 ssize_t r = write(dtio->commandpipe[1], &cmd, sizeof(cmd));
147 if(r == -1) {
148 #ifndef USE_WINSOCK
149 if(errno == EINTR || errno == EAGAIN)
150 continue;
151 log_err("dnstap io wakeup: write: %s", strerror(errno));
152 #else
153 if(WSAGetLastError() == WSAEINPROGRESS)
154 continue;
155 if(WSAGetLastError() == WSAEWOULDBLOCK)
156 continue;
157 log_err("dnstap io stop: write: %s",
158 wsa_strerror(WSAGetLastError()));
159 #endif
160 break;
161 }
162 break;
163 }
164 }
165
166 void
167 dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len)
168 {
169 int wakeup = 0;
170 struct dt_msg_entry* entry;
171
172 /* check conditions */
173 if(!buf) return;
174 if(len == 0) {
175 /* it is not possible to log entries with zero length,
176 * because the framestream protocol does not carry it.
177 * However the protobuf serialization does not create zero
178 * length datagrams for dnstap, so this should not happen. */
179 free(buf);
180 return;
181 }
182 if(!mq) {
183 free(buf);
184 return;
185 }
186
187 /* allocate memory for queue entry */
188 entry = malloc(sizeof(*entry));
189 if(!entry) {
190 log_err("out of memory logging dnstap");
191 free(buf);
192 return;
193 }
194 entry->next = NULL;
195 entry->buf = buf;
196 entry->len = len;
197
198 /* aqcuire lock */
199 lock_basic_lock(&mq->lock);
200 /* list was empty, wakeup dtio */
201 if(mq->first == NULL)
202 wakeup = 1;
203 /* see if it is going to fit */
204 if(mq->cursize + len > mq->maxsize) {
205 /* buffer full, or congested. */
206 /* drop */
207 lock_basic_unlock(&mq->lock);
208 free(buf);
209 free(entry);
210 return;
211 }
212 mq->cursize += len;
213 /* append to list */
214 if(mq->last) {
215 mq->last->next = entry;
216 } else {
217 mq->first = entry;
218 }
219 mq->last = entry;
220 /* release lock */
221 lock_basic_unlock(&mq->lock);
222
223 if(wakeup)
224 dtio_wakeup(mq->dtio);
225 }
226
227 struct dt_io_thread* dt_io_thread_create(void)
228 {
229 struct dt_io_thread* dtio = calloc(1, sizeof(*dtio));
230 return dtio;
231 }
232
233 void dt_io_thread_delete(struct dt_io_thread* dtio)
234 {
235 struct dt_io_list_item* item, *nextitem;
236 if(!dtio) return;
237 item=dtio->io_list;
238 while(item) {
239 nextitem = item->next;
240 free(item);
241 item = nextitem;
242 }
243 free(dtio->socket_path);
244 free(dtio->ip_str);
245 free(dtio->tls_server_name);
246 free(dtio->client_key_file);
247 free(dtio->client_cert_file);
248 if(dtio->ssl_ctx) {
249 #ifdef HAVE_SSL
250 SSL_CTX_free(dtio->ssl_ctx);
251 #endif
252 }
253 free(dtio);
254 }
255
256 int dt_io_thread_apply_cfg(struct dt_io_thread* dtio, struct config_file *cfg)
257 {
258 if(!cfg->dnstap) {
259 log_warn("cannot setup dnstap because dnstap-enable is no");
260 return 0;
261 }
262
263 /* what type of connectivity do we have */
264 if(cfg->dnstap_ip && cfg->dnstap_ip[0]) {
265 if(cfg->dnstap_tls)
266 dtio->upstream_is_tls = 1;
267 else dtio->upstream_is_tcp = 1;
268 } else {
269 dtio->upstream_is_unix = 1;
270 }
271 dtio->is_bidirectional = cfg->dnstap_bidirectional;
272
273 if(dtio->upstream_is_unix) {
274 if(!cfg->dnstap_socket_path ||
275 cfg->dnstap_socket_path[0]==0) {
276 log_err("dnstap setup: no dnstap-socket-path for "
277 "socket connect");
278 return 0;
279 }
280 free(dtio->socket_path);
281 dtio->socket_path = strdup(cfg->dnstap_socket_path);
282 if(!dtio->socket_path) {
283 log_err("dnstap setup: malloc failure");
284 return 0;
285 }
286 }
287
288 if(dtio->upstream_is_tcp || dtio->upstream_is_tls) {
289 if(!cfg->dnstap_ip || cfg->dnstap_ip[0] == 0) {
290 log_err("dnstap setup: no dnstap-ip for TCP connect");
291 return 0;
292 }
293 free(dtio->ip_str);
294 dtio->ip_str = strdup(cfg->dnstap_ip);
295 if(!dtio->ip_str) {
296 log_err("dnstap setup: malloc failure");
297 return 0;
298 }
299 }
300
301 if(dtio->upstream_is_tls) {
302 #ifdef HAVE_SSL
303 if(cfg->dnstap_tls_server_name &&
304 cfg->dnstap_tls_server_name[0]) {
305 free(dtio->tls_server_name);
306 dtio->tls_server_name = strdup(
307 cfg->dnstap_tls_server_name);
308 if(!dtio->tls_server_name) {
309 log_err("dnstap setup: malloc failure");
310 return 0;
311 }
312 if(!check_auth_name_for_ssl(dtio->tls_server_name))
313 return 0;
314 }
315 if(cfg->dnstap_tls_client_key_file &&
316 cfg->dnstap_tls_client_key_file[0]) {
317 dtio->use_client_certs = 1;
318 free(dtio->client_key_file);
319 dtio->client_key_file = strdup(
320 cfg->dnstap_tls_client_key_file);
321 if(!dtio->client_key_file) {
322 log_err("dnstap setup: malloc failure");
323 return 0;
324 }
325 if(!cfg->dnstap_tls_client_cert_file ||
326 cfg->dnstap_tls_client_cert_file[0]==0) {
327 log_err("dnstap setup: client key "
328 "authentication enabled with "
329 "dnstap-tls-client-key-file, but "
330 "no dnstap-tls-client-cert-file "
331 "is given");
332 return 0;
333 }
334 free(dtio->client_cert_file);
335 dtio->client_cert_file = strdup(
336 cfg->dnstap_tls_client_cert_file);
337 if(!dtio->client_cert_file) {
338 log_err("dnstap setup: malloc failure");
339 return 0;
340 }
341 } else {
342 dtio->use_client_certs = 0;
343 dtio->client_key_file = NULL;
344 dtio->client_cert_file = NULL;
345 }
346
347 if(cfg->dnstap_tls_cert_bundle) {
348 dtio->ssl_ctx = connect_sslctx_create(
349 dtio->client_key_file,
350 dtio->client_cert_file,
351 cfg->dnstap_tls_cert_bundle, 0);
352 } else {
353 dtio->ssl_ctx = connect_sslctx_create(
354 dtio->client_key_file,
355 dtio->client_cert_file,
356 cfg->tls_cert_bundle, cfg->tls_win_cert);
357 }
358 if(!dtio->ssl_ctx) {
359 log_err("could not setup SSL CTX");
360 return 0;
361 }
362 dtio->tls_use_sni = cfg->tls_use_sni;
363 #endif /* HAVE_SSL */
364 }
365 return 1;
366 }
367
368 int dt_io_thread_register_queue(struct dt_io_thread* dtio,
369 struct dt_msg_queue* mq)
370 {
371 struct dt_io_list_item* item = malloc(sizeof(*item));
372 if(!item) return 0;
373 lock_basic_lock(&mq->lock);
374 mq->dtio = dtio;
375 lock_basic_unlock(&mq->lock);
376 item->queue = mq;
377 item->next = dtio->io_list;
378 dtio->io_list = item;
379 dtio->io_list_iter = NULL;
380 return 1;
381 }
382
383 void dt_io_thread_unregister_queue(struct dt_io_thread* dtio,
384 struct dt_msg_queue* mq)
385 {
386 struct dt_io_list_item* item, *prev=NULL;
387 if(!dtio) return;
388 item = dtio->io_list;
389 while(item) {
390 if(item->queue == mq) {
391 /* found it */
392 if(prev) prev->next = item->next;
393 else dtio->io_list = item->next;
394 /* the queue itself only registered, not deleted */
395 lock_basic_lock(&item->queue->lock);
396 item->queue->dtio = NULL;
397 lock_basic_unlock(&item->queue->lock);
398 free(item);
399 dtio->io_list_iter = NULL;
400 return;
401 }
402 prev = item;
403 item = item->next;
404 }
405 }
406
407 /** pick a message from the queue, the routine locks and unlocks,
408 * returns true if there is a message */
409 static int dt_msg_queue_pop(struct dt_msg_queue* mq, void** buf,
410 size_t* len)
411 {
412 lock_basic_lock(&mq->lock);
413 if(mq->first) {
414 struct dt_msg_entry* entry = mq->first;
415 mq->first = entry->next;
416 if(!entry->next) mq->last = NULL;
417 mq->cursize -= entry->len;
418 lock_basic_unlock(&mq->lock);
419
420 *buf = entry->buf;
421 *len = entry->len;
422 free(entry);
423 return 1;
424 }
425 lock_basic_unlock(&mq->lock);
426 return 0;
427 }
428
429 /** find message in queue, false if no message, true if message to send */
430 static int dtio_find_in_queue(struct dt_io_thread* dtio,
431 struct dt_msg_queue* mq)
432 {
433 void* buf=NULL;
434 size_t len=0;
435 if(dt_msg_queue_pop(mq, &buf, &len)) {
436 dtio->cur_msg = buf;
437 dtio->cur_msg_len = len;
438 dtio->cur_msg_done = 0;
439 dtio->cur_msg_len_done = 0;
440 return 1;
441 }
442 return 0;
443 }
444
445 /** find a new message to write, search message queues, false if none */
446 static int dtio_find_msg(struct dt_io_thread* dtio)
447 {
448 struct dt_io_list_item *spot, *item;
449
450 spot = dtio->io_list_iter;
451 /* use the next queue for the next message lookup,
452 * if we hit the end(NULL) the NULL restarts the iter at start. */
453 if(spot)
454 dtio->io_list_iter = spot->next;
455 else if(dtio->io_list)
456 dtio->io_list_iter = dtio->io_list->next;
457
458 /* scan from spot to end-of-io_list */
459 item = spot;
460 while(item) {
461 if(dtio_find_in_queue(dtio, item->queue))
462 return 1;
463 item = item->next;
464 }
465 /* scan starting at the start-of-list (to wrap around the end) */
466 item = dtio->io_list;
467 while(item) {
468 if(dtio_find_in_queue(dtio, item->queue))
469 return 1;
470 item = item->next;
471 }
472 return 0;
473 }
474
475 /** callback for the dnstap reconnect, to start reconnecting to output */
476 void dtio_reconnect_timeout_cb(int ATTR_UNUSED(fd),
477 short ATTR_UNUSED(bits), void* arg)
478 {
479 struct dt_io_thread* dtio = (struct dt_io_thread*)arg;
480 dtio->reconnect_is_added = 0;
481 verbose(VERB_ALGO, "dnstap io: reconnect timer");
482
483 dtio_open_output(dtio);
484 if(dtio->event) {
485 if(!dtio_add_output_event_write(dtio))
486 return;
487 /* nothing wrong so far, wait on the output event */
488 return;
489 }
490 /* exponential backoff and retry on timer */
491 dtio_reconnect_enable(dtio);
492 }
493
494 /** attempt to reconnect to the output, after a timeout */
495 static void dtio_reconnect_enable(struct dt_io_thread* dtio)
496 {
497 struct timeval tv;
498 int msec;
499 if(dtio->want_to_exit) return;
500 if(dtio->reconnect_is_added)
501 return; /* already done */
502
503 /* exponential backoff, store the value for next timeout */
504 msec = dtio->reconnect_timeout;
505 if(msec == 0) {
506 dtio->reconnect_timeout = DTIO_RECONNECT_TIMEOUT_MIN;
507 } else {
508 dtio->reconnect_timeout = msec*2;
509 if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MAX)
510 dtio->reconnect_timeout = DTIO_RECONNECT_TIMEOUT_MAX;
511 }
512 verbose(VERB_ALGO, "dnstap io: set reconnect attempt after %d msec",
513 msec);
514
515 /* setup wait timer */
516 memset(&tv, 0, sizeof(tv));
517 tv.tv_sec = msec/1000;
518 tv.tv_usec = (msec%1000)*1000;
519 if(ub_timer_add(dtio->reconnect_timer, dtio->event_base,
520 &dtio_reconnect_timeout_cb, dtio, &tv) != 0) {
521 log_err("dnstap io: could not reconnect ev timer add");
522 return;
523 }
524 dtio->reconnect_is_added = 1;
525 }
526
527 /** remove dtio reconnect timer */
528 static void dtio_reconnect_del(struct dt_io_thread* dtio)
529 {
530 if(!dtio->reconnect_is_added)
531 return;
532 ub_timer_del(dtio->reconnect_timer);
533 dtio->reconnect_is_added = 0;
534 }
535
536 /** clear the reconnect exponential backoff timer.
537 * We have successfully connected so we can try again with short timeouts. */
538 static void dtio_reconnect_clear(struct dt_io_thread* dtio)
539 {
540 dtio->reconnect_timeout = 0;
541 dtio_reconnect_del(dtio);
542 }
543
544 /** reconnect slowly, because we already know we have to wait for a bit */
545 static void dtio_reconnect_slow(struct dt_io_thread* dtio, int msec)
546 {
547 dtio_reconnect_del(dtio);
548 dtio->reconnect_timeout = msec;
549 dtio_reconnect_enable(dtio);
550 }
551
552 /** delete the current message in the dtio, and reset counters */
553 static void dtio_cur_msg_free(struct dt_io_thread* dtio)
554 {
555 free(dtio->cur_msg);
556 dtio->cur_msg = NULL;
557 dtio->cur_msg_len = 0;
558 dtio->cur_msg_done = 0;
559 dtio->cur_msg_len_done = 0;
560 }
561
562 /** delete the buffer and counters used to read frame */
563 static void dtio_read_frame_free(struct dt_frame_read_buf* rb)
564 {
565 if(rb->buf) {
566 free(rb->buf);
567 rb->buf = NULL;
568 }
569 rb->buf_count = 0;
570 rb->buf_cap = 0;
571 rb->frame_len = 0;
572 rb->frame_len_done = 0;
573 rb->control_frame = 0;
574 }
575
576 /** del the output file descriptor event for listening */
577 static void dtio_del_output_event(struct dt_io_thread* dtio)
578 {
579 if(!dtio->event_added)
580 return;
581 ub_event_del(dtio->event);
582 dtio->event_added = 0;
583 dtio->event_added_is_write = 0;
584 }
585
586 /** close dtio socket and set it to -1 */
587 static void dtio_close_fd(struct dt_io_thread* dtio)
588 {
589 #ifndef USE_WINSOCK
590 close(dtio->fd);
591 #else
592 closesocket(dtio->fd);
593 #endif
594 dtio->fd = -1;
595 }
596
597 /** close and stop the output file descriptor event */
598 static void dtio_close_output(struct dt_io_thread* dtio)
599 {
600 if(!dtio->event)
601 return;
602 ub_event_free(dtio->event);
603 dtio->event = NULL;
604 if(dtio->ssl) {
605 #ifdef HAVE_SSL
606 SSL_shutdown(dtio->ssl);
607 SSL_free(dtio->ssl);
608 dtio->ssl = NULL;
609 #endif
610 }
611 dtio_close_fd(dtio);
612
613 /* if there is a (partial) message, discard it
614 * we cannot send (the remainder of) it, and a new
615 * connection needs to start with a control frame. */
616 if(dtio->cur_msg) {
617 dtio_cur_msg_free(dtio);
618 }
619
620 dtio->ready_frame_sent = 0;
621 dtio->accept_frame_received = 0;
622 dtio_read_frame_free(&dtio->read_frame);
623
624 dtio_reconnect_enable(dtio);
625 }
626
627 /** check for pending nonblocking connect errors,
628 * returns 1 if it is okay. -1 on error (close it), 0 to try later */
629 static int dtio_check_nb_connect(struct dt_io_thread* dtio)
630 {
631 int error = 0;
632 socklen_t len = (socklen_t)sizeof(error);
633 if(!dtio->check_nb_connect)
634 return 1; /* everything okay */
635 if(getsockopt(dtio->fd, SOL_SOCKET, SO_ERROR, (void*)&error,
636 &len) < 0) {
637 #ifndef USE_WINSOCK
638 error = errno; /* on solaris errno is error */
639 #else
640 error = WSAGetLastError();
641 #endif
642 }
643 #ifndef USE_WINSOCK
644 #if defined(EINPROGRESS) && defined(EWOULDBLOCK)
645 if(error == EINPROGRESS || error == EWOULDBLOCK)
646 return 0; /* try again later */
647 #endif
648 #else
649 if(error == WSAEINPROGRESS) {
650 return 0; /* try again later */
651 } else if(error == WSAEWOULDBLOCK) {
652 ub_winsock_tcp_wouldblock((dtio->stop_flush_event?
653 dtio->stop_flush_event:dtio->event), UB_EV_WRITE);
654 return 0; /* try again later */
655 }
656 #endif
657 if(error != 0) {
658 char* to = dtio->socket_path;
659 if(!to) to = dtio->ip_str;
660 if(!to) to = "";
661 #ifndef USE_WINSOCK
662 log_err("dnstap io: failed to connect to \"%s\": %s",
663 to, strerror(error));
664 #else
665 log_err("dnstap io: failed to connect to \"%s\": %s",
666 to, wsa_strerror(error));
667 #endif
668 return -1; /* error, close it */
669 }
670
671 if(dtio->ip_str)
672 verbose(VERB_DETAIL, "dnstap io: connected to %s",
673 dtio->ip_str);
674 else if(dtio->socket_path)
675 verbose(VERB_DETAIL, "dnstap io: connected to \"%s\"",
676 dtio->socket_path);
677 dtio_reconnect_clear(dtio);
678 dtio->check_nb_connect = 0;
679 return 1; /* everything okay */
680 }
681
682 #ifdef HAVE_SSL
683 /** write to ssl output
684 * returns number of bytes written, 0 if nothing happened,
685 * try again later, or -1 if the channel is to be closed. */
686 static int dtio_write_ssl(struct dt_io_thread* dtio, uint8_t* buf,
687 size_t len)
688 {
689 int r;
690 ERR_clear_error();
691 r = SSL_write(dtio->ssl, buf, len);
692 if(r <= 0) {
693 int want = SSL_get_error(dtio->ssl, r);
694 if(want == SSL_ERROR_ZERO_RETURN) {
695 /* closed */
696 return -1;
697 } else if(want == SSL_ERROR_WANT_READ) {
698 /* we want a brief read event */
699 dtio_enable_brief_read(dtio);
700 return 0;
701 } else if(want == SSL_ERROR_WANT_WRITE) {
702 /* write again later */
703 return 0;
704 } else if(want == SSL_ERROR_SYSCALL) {
705 #ifdef EPIPE
706 if(errno == EPIPE && verbosity < 2)
707 return -1; /* silence 'broken pipe' */
708 #endif
709 #ifdef ECONNRESET
710 if(errno == ECONNRESET && verbosity < 2)
711 return -1; /* silence reset by peer */
712 #endif
713 if(errno != 0) {
714 log_err("dnstap io, SSL_write syscall: %s",
715 strerror(errno));
716 }
717 return -1;
718 }
719 log_crypto_err("dnstap io, could not SSL_write");
720 return -1;
721 }
722 return r;
723 }
724 #endif /* HAVE_SSL */
725
726 /** write buffer to output.
727 * returns number of bytes written, 0 if nothing happened,
728 * try again later, or -1 if the channel is to be closed. */
729 static int dtio_write_buf(struct dt_io_thread* dtio, uint8_t* buf,
730 size_t len)
731 {
732 ssize_t ret;
733 if(dtio->fd == -1)
734 return -1;
735 #ifdef HAVE_SSL
736 if(dtio->ssl)
737 return dtio_write_ssl(dtio, buf, len);
738 #endif
739 ret = send(dtio->fd, (void*)buf, len, 0);
740 if(ret == -1) {
741 #ifndef USE_WINSOCK
742 if(errno == EINTR || errno == EAGAIN)
743 return 0;
744 log_err("dnstap io: failed send: %s", strerror(errno));
745 #else
746 if(WSAGetLastError() == WSAEINPROGRESS)
747 return 0;
748 if(WSAGetLastError() == WSAEWOULDBLOCK) {
749 ub_winsock_tcp_wouldblock((dtio->stop_flush_event?
750 dtio->stop_flush_event:dtio->event),
751 UB_EV_WRITE);
752 return 0;
753 }
754 log_err("dnstap io: failed send: %s",
755 wsa_strerror(WSAGetLastError()));
756 #endif
757 return -1;
758 }
759 return ret;
760 }
761
762 #ifdef HAVE_WRITEV
763 /** write with writev, len and message, in one write, if possible.
764 * return true if message is done, false if incomplete */
765 static int dtio_write_with_writev(struct dt_io_thread* dtio)
766 {
767 uint32_t sendlen = htonl(dtio->cur_msg_len);
768 struct iovec iov[2];
769 ssize_t r;
770 iov[0].iov_base = ((uint8_t*)&sendlen)+dtio->cur_msg_len_done;
771 iov[0].iov_len = sizeof(sendlen)-dtio->cur_msg_len_done;
772 iov[1].iov_base = dtio->cur_msg;
773 iov[1].iov_len = dtio->cur_msg_len;
774 log_assert(iov[0].iov_len > 0);
775 r = writev(dtio->fd, iov, 2);
776 if(r == -1) {
777 #ifndef USE_WINSOCK
778 if(errno == EINTR || errno == EAGAIN)
779 return 0;
780 log_err("dnstap io: failed writev: %s", strerror(errno));
781 #else
782 if(WSAGetLastError() == WSAEINPROGRESS)
783 return 0;
784 if(WSAGetLastError() == WSAEWOULDBLOCK) {
785 ub_winsock_tcp_wouldblock((dtio->stop_flush_event?
786 dtio->stop_flush_event:dtio->event),
787 UB_EV_WRITE);
788 return 0;
789 }
790 log_err("dnstap io: failed writev: %s",
791 wsa_strerror(WSAGetLastError()));
792 #endif
793 /* close the channel */
794 dtio_del_output_event(dtio);
795 dtio_close_output(dtio);
796 return 0;
797 }
798 /* written r bytes */
799 dtio->cur_msg_len_done += r;
800 if(dtio->cur_msg_len_done < 4)
801 return 0;
802 if(dtio->cur_msg_len_done > 4) {
803 dtio->cur_msg_done = dtio->cur_msg_len_done-4;
804 dtio->cur_msg_len_done = 4;
805 }
806 if(dtio->cur_msg_done < dtio->cur_msg_len)
807 return 0;
808 return 1;
809 }
810 #endif /* HAVE_WRITEV */
811
812 /** write more of the length, preceding the data frame.
813 * return true if message is done, false if incomplete. */
814 static int dtio_write_more_of_len(struct dt_io_thread* dtio)
815 {
816 uint32_t sendlen;
817 int r;
818 if(dtio->cur_msg_len_done >= 4)
819 return 1;
820 #ifdef HAVE_WRITEV
821 if(!dtio->ssl) {
822 /* we try writev for everything.*/
823 return dtio_write_with_writev(dtio);
824 }
825 #endif /* HAVE_WRITEV */
826 sendlen = htonl(dtio->cur_msg_len);
827 r = dtio_write_buf(dtio,
828 ((uint8_t*)&sendlen)+dtio->cur_msg_len_done,
829 sizeof(sendlen)-dtio->cur_msg_len_done);
830 if(r == -1) {
831 /* close the channel */
832 dtio_del_output_event(dtio);
833 dtio_close_output(dtio);
834 return 0;
835 } else if(r == 0) {
836 /* try again later */
837 return 0;
838 }
839 dtio->cur_msg_len_done += r;
840 if(dtio->cur_msg_len_done < 4)
841 return 0;
842 return 1;
843 }
844
845 /** write more of the data frame.
846 * return true if message is done, false if incomplete. */
847 static int dtio_write_more_of_data(struct dt_io_thread* dtio)
848 {
849 int r;
850 if(dtio->cur_msg_done >= dtio->cur_msg_len)
851 return 1;
852 r = dtio_write_buf(dtio,
853 ((uint8_t*)dtio->cur_msg)+dtio->cur_msg_done,
854 dtio->cur_msg_len - dtio->cur_msg_done);
855 if(r == -1) {
856 /* close the channel */
857 dtio_del_output_event(dtio);
858 dtio_close_output(dtio);
859 return 0;
860 } else if(r == 0) {
861 /* try again later */
862 return 0;
863 }
864 dtio->cur_msg_done += r;
865 if(dtio->cur_msg_done < dtio->cur_msg_len)
866 return 0;
867 return 1;
868 }
869
870 /** write more of the current messsage. false if incomplete, true if
871 * the message is done */
872 static int dtio_write_more(struct dt_io_thread* dtio)
873 {
874 if(dtio->cur_msg_len_done < 4) {
875 if(!dtio_write_more_of_len(dtio))
876 return 0;
877 }
878 if(dtio->cur_msg_done < dtio->cur_msg_len) {
879 if(!dtio_write_more_of_data(dtio))
880 return 0;
881 }
882 return 1;
883 }
884
885 /** Receive bytes from dtio->fd, store in buffer. Returns 0: closed,
886 * -1: continue, >0: number of bytes read into buffer */
887 static ssize_t receive_bytes(struct dt_io_thread* dtio, void* buf, size_t len) {
888 ssize_t r;
889 r = recv(dtio->fd, (void*)buf, len, 0);
890 if(r == -1) {
891 char* to = dtio->socket_path;
892 if(!to) to = dtio->ip_str;
893 if(!to) to = "";
894 #ifndef USE_WINSOCK
895 if(errno == EINTR || errno == EAGAIN)
896 return -1; /* try later */
897 #else
898 if(WSAGetLastError() == WSAEINPROGRESS) {
899 return -1; /* try later */
900 } else if(WSAGetLastError() == WSAEWOULDBLOCK) {
901 ub_winsock_tcp_wouldblock(
902 (dtio->stop_flush_event?
903 dtio->stop_flush_event:dtio->event),
904 UB_EV_READ);
905 return -1; /* try later */
906 }
907 #endif
908 if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN &&
909 verbosity < 4)
910 return 0; /* no log retries on low verbosity */
911 log_err("dnstap io: output closed, recv %s: %s", to,
912 strerror(errno));
913 /* and close below */
914 return 0;
915 }
916 if(r == 0) {
917 if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN &&
918 verbosity < 4)
919 return 0; /* no log retries on low verbosity */
920 verbose(VERB_DETAIL, "dnstap io: output closed by the other side");
921 /* and close below */
922 return 0;
923 }
924 /* something was received */
925 return r;
926 }
927
928 #ifdef HAVE_SSL
929 /** Receive bytes over TLS from dtio->fd, store in buffer. Returns 0: closed,
930 * -1: continue, >0: number of bytes read into buffer */
931 static int ssl_read_bytes(struct dt_io_thread* dtio, void* buf, size_t len)
932 {
933 int r;
934 ERR_clear_error();
935 r = SSL_read(dtio->ssl, buf, len);
936 if(r <= 0) {
937 int want = SSL_get_error(dtio->ssl, r);
938 if(want == SSL_ERROR_ZERO_RETURN) {
939 if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN &&
940 verbosity < 4)
941 return 0; /* no log retries on low verbosity */
942 verbose(VERB_DETAIL, "dnstap io: output closed by the "
943 "other side");
944 return 0;
945 } else if(want == SSL_ERROR_WANT_READ) {
946 /* continue later */
947 return -1;
948 } else if(want == SSL_ERROR_WANT_WRITE) {
949 (void)dtio_enable_brief_write(dtio);
950 return -1;
951 } else if(want == SSL_ERROR_SYSCALL) {
952 #ifdef ECONNRESET
953 if(dtio->reconnect_timeout > DTIO_RECONNECT_TIMEOUT_MIN &&
954 errno == ECONNRESET && verbosity < 4)
955 return 0; /* silence reset by peer */
956 #endif
957 if(errno != 0)
958 log_err("SSL_read syscall: %s",
959 strerror(errno));
960 verbose(VERB_DETAIL, "dnstap io: output closed by the "
961 "other side");
962 return 0;
963 }
964 log_crypto_err("could not SSL_read");
965 verbose(VERB_DETAIL, "dnstap io: output closed by the "
966 "other side");
967 return 0;
968 }
969 return r;
970 }
971 #endif /* HAVE_SSL */
972
973 /** check if the output fd has been closed,
974 * it returns false if the stream is closed. */
975 static int dtio_check_close(struct dt_io_thread* dtio)
976 {
977 /* we don't want to read any packets, but if there are we can
978 * discard the input (ignore it). Ignore of unknown (control)
979 * packets is okay for the framestream protocol. And also, the
980 * read call can return that the stream has been closed by the
981 * other side. */
982 uint8_t buf[1024];
983 int r = -1;
984
985
986 if(dtio->fd == -1) return 0;
987
988 while(r != 0) {
989 /* not interested in buffer content, overwrite */
990 r = receive_bytes(dtio, (void*)buf, sizeof(buf));
991 if(r == -1)
992 return 1;
993 }
994 /* the other end has been closed */
995 /* close the channel */
996 dtio_del_output_event(dtio);
997 dtio_close_output(dtio);
998 return 0;
999 }
1000
1001 /** Read accept frame. Returns -1: continue reading, 0: closed,
1002 * 1: valid accept received. */
1003 static int dtio_read_accept_frame(struct dt_io_thread* dtio)
1004 {
1005 int r;
1006 size_t read_frame_done;
1007 while(dtio->read_frame.frame_len_done < 4) {
1008 #ifdef HAVE_SSL
1009 if(dtio->ssl) {
1010 r = ssl_read_bytes(dtio,
1011 (uint8_t*)&dtio->read_frame.frame_len+
1012 dtio->read_frame.frame_len_done,
1013 4-dtio->read_frame.frame_len_done);
1014 } else {
1015 #endif
1016 r = receive_bytes(dtio,
1017 (uint8_t*)&dtio->read_frame.frame_len+
1018 dtio->read_frame.frame_len_done,
1019 4-dtio->read_frame.frame_len_done);
1020 #ifdef HAVE_SSL
1021 }
1022 #endif
1023 if(r == -1)
1024 return -1; /* continue reading */
1025 if(r == 0) {
1026 /* connection closed */
1027 goto close_connection;
1028 }
1029 dtio->read_frame.frame_len_done += r;
1030 if(dtio->read_frame.frame_len_done < 4)
1031 return -1; /* continue reading */
1032
1033 if(dtio->read_frame.frame_len == 0) {
1034 dtio->read_frame.frame_len_done = 0;
1035 dtio->read_frame.control_frame = 1;
1036 continue;
1037 }
1038 dtio->read_frame.frame_len = ntohl(dtio->read_frame.frame_len);
1039 if(dtio->read_frame.frame_len > DTIO_RECV_FRAME_MAX_LEN) {
1040 verbose(VERB_OPS, "dnstap: received frame exceeds max "
1041 "length of %d bytes, closing connection",
1042 DTIO_RECV_FRAME_MAX_LEN);
1043 goto close_connection;
1044 }
1045 dtio->read_frame.buf = calloc(1, dtio->read_frame.frame_len);
1046 dtio->read_frame.buf_cap = dtio->read_frame.frame_len;
1047 if(!dtio->read_frame.buf) {
1048 log_err("dnstap io: out of memory (creating read "
1049 "buffer)");
1050 goto close_connection;
1051 }
1052 }
1053 if(dtio->read_frame.buf_count < dtio->read_frame.frame_len) {
1054 #ifdef HAVE_SSL
1055 if(dtio->ssl) {
1056 r = ssl_read_bytes(dtio, dtio->read_frame.buf+
1057 dtio->read_frame.buf_count,
1058 dtio->read_frame.buf_cap-
1059 dtio->read_frame.buf_count);
1060 } else {
1061 #endif
1062 r = receive_bytes(dtio, dtio->read_frame.buf+
1063 dtio->read_frame.buf_count,
1064 dtio->read_frame.buf_cap-
1065 dtio->read_frame.buf_count);
1066 #ifdef HAVE_SSL
1067 }
1068 #endif
1069 if(r == -1)
1070 return -1; /* continue reading */
1071 if(r == 0) {
1072 /* connection closed */
1073 goto close_connection;
1074 }
1075 dtio->read_frame.buf_count += r;
1076 if(dtio->read_frame.buf_count < dtio->read_frame.frame_len)
1077 return -1; /* continue reading */
1078 }
1079
1080 /* Complete frame received, check if this is a valid ACCEPT control
1081 * frame. */
1082 if(dtio->read_frame.frame_len < 4) {
1083 verbose(VERB_OPS, "dnstap: invalid data received");
1084 goto close_connection;
1085 }
1086 if(sldns_read_uint32(dtio->read_frame.buf) !=
1087 FSTRM_CONTROL_FRAME_ACCEPT) {
1088 verbose(VERB_ALGO, "dnstap: invalid control type received, "
1089 "ignored");
1090 dtio->ready_frame_sent = 0;
1091 dtio->accept_frame_received = 0;
1092 dtio_read_frame_free(&dtio->read_frame);
1093 return -1;
1094 }
1095 read_frame_done = 4; /* control frame type */
1096
1097 /* Iterate over control fields, ignore unknown types.
1098 * Need to be able to read at least 8 bytes (control field type +
1099 * length). */
1100 while(read_frame_done+8 < dtio->read_frame.frame_len) {
1101 uint32_t type = sldns_read_uint32(dtio->read_frame.buf +
1102 read_frame_done);
1103 uint32_t len = sldns_read_uint32(dtio->read_frame.buf +
1104 read_frame_done + 4);
1105 if(type == FSTRM_CONTROL_FIELD_TYPE_CONTENT_TYPE) {
1106 if(len == strlen(DNSTAP_CONTENT_TYPE) &&
1107 read_frame_done+8+len <=
1108 dtio->read_frame.frame_len &&
1109 memcmp(dtio->read_frame.buf + read_frame_done +
1110 + 8, DNSTAP_CONTENT_TYPE, len) == 0) {
1111 if(!dtio_control_start_send(dtio)) {
1112 verbose(VERB_OPS, "dnstap io: out of "
1113 "memory while sending START frame");
1114 goto close_connection;
1115 }
1116 dtio->accept_frame_received = 1;
1117 return 1;
1118 } else {
1119 /* unknow content type */
1120 verbose(VERB_ALGO, "dnstap: ACCEPT frame "
1121 "contains unknown content type, "
1122 "closing connection");
1123 goto close_connection;
1124 }
1125 }
1126 /* unknown option, try next */
1127 read_frame_done += 8+len;
1128 }
1129
1130
1131 close_connection:
1132 dtio_del_output_event(dtio);
1133 dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW);
1134 dtio_close_output(dtio);
1135 return 0;
1136 }
1137
1138 /** add the output file descriptor event for listening, read only */
1139 static int dtio_add_output_event_read(struct dt_io_thread* dtio)
1140 {
1141 if(!dtio->event)
1142 return 0;
1143 if(dtio->event_added && !dtio->event_added_is_write)
1144 return 1;
1145 /* we have to (re-)register the event */
1146 if(dtio->event_added)
1147 ub_event_del(dtio->event);
1148 ub_event_del_bits(dtio->event, UB_EV_WRITE);
1149 if(ub_event_add(dtio->event, NULL) != 0) {
1150 log_err("dnstap io: out of memory (adding event)");
1151 dtio->event_added = 0;
1152 dtio->event_added_is_write = 0;
1153 /* close output and start reattempts to open it */
1154 dtio_close_output(dtio);
1155 return 0;
1156 }
1157 dtio->event_added = 1;
1158 dtio->event_added_is_write = 0;
1159 return 1;
1160 }
1161
1162 /** add the output file descriptor event for listening, read and write */
1163 static int dtio_add_output_event_write(struct dt_io_thread* dtio)
1164 {
1165 if(!dtio->event)
1166 return 0;
1167 if(dtio->event_added && dtio->event_added_is_write)
1168 return 1;
1169 /* we have to (re-)register the event */
1170 if(dtio->event_added)
1171 ub_event_del(dtio->event);
1172 ub_event_add_bits(dtio->event, UB_EV_WRITE);
1173 if(ub_event_add(dtio->event, NULL) != 0) {
1174 log_err("dnstap io: out of memory (adding event)");
1175 dtio->event_added = 0;
1176 dtio->event_added_is_write = 0;
1177 /* close output and start reattempts to open it */
1178 dtio_close_output(dtio);
1179 return 0;
1180 }
1181 dtio->event_added = 1;
1182 dtio->event_added_is_write = 1;
1183 return 1;
1184 }
1185
1186 /** put the dtio thread to sleep */
1187 static void dtio_sleep(struct dt_io_thread* dtio)
1188 {
1189 /* unregister the event polling for write, because there is
1190 * nothing to be written */
1191 (void)dtio_add_output_event_read(dtio);
1192 }
1193
1194 #ifdef HAVE_SSL
1195 /** enable the brief read condition */
1196 static int dtio_enable_brief_read(struct dt_io_thread* dtio)
1197 {
1198 dtio->ssl_brief_read = 1;
1199 if(dtio->stop_flush_event) {
1200 ub_event_del(dtio->stop_flush_event);
1201 ub_event_del_bits(dtio->stop_flush_event, UB_EV_WRITE);
1202 if(ub_event_add(dtio->stop_flush_event, NULL) != 0) {
1203 log_err("dnstap io, stop flush, could not ub_event_add");
1204 return 0;
1205 }
1206 return 1;
1207 }
1208 return dtio_add_output_event_read(dtio);
1209 }
1210 #endif /* HAVE_SSL */
1211
1212 #ifdef HAVE_SSL
1213 /** disable the brief read condition */
1214 static int dtio_disable_brief_read(struct dt_io_thread* dtio)
1215 {
1216 dtio->ssl_brief_read = 0;
1217 if(dtio->stop_flush_event) {
1218 ub_event_del(dtio->stop_flush_event);
1219 ub_event_add_bits(dtio->stop_flush_event, UB_EV_WRITE);
1220 if(ub_event_add(dtio->stop_flush_event, NULL) != 0) {
1221 log_err("dnstap io, stop flush, could not ub_event_add");
1222 return 0;
1223 }
1224 return 1;
1225 }
1226 return dtio_add_output_event_write(dtio);
1227 }
1228 #endif /* HAVE_SSL */
1229
1230 #ifdef HAVE_SSL
1231 /** enable the brief write condition */
1232 static int dtio_enable_brief_write(struct dt_io_thread* dtio)
1233 {
1234 dtio->ssl_brief_write = 1;
1235 return dtio_add_output_event_write(dtio);
1236 }
1237 #endif /* HAVE_SSL */
1238
1239 #ifdef HAVE_SSL
1240 /** disable the brief write condition */
1241 static int dtio_disable_brief_write(struct dt_io_thread* dtio)
1242 {
1243 dtio->ssl_brief_write = 0;
1244 return dtio_add_output_event_read(dtio);
1245 }
1246 #endif /* HAVE_SSL */
1247
1248 #ifdef HAVE_SSL
1249 /** check peer verification after ssl handshake connection, false if closed*/
1250 static int dtio_ssl_check_peer(struct dt_io_thread* dtio)
1251 {
1252 if((SSL_get_verify_mode(dtio->ssl)&SSL_VERIFY_PEER)) {
1253 /* verification */
1254 if(SSL_get_verify_result(dtio->ssl) == X509_V_OK) {
1255 X509* x = SSL_get_peer_certificate(dtio->ssl);
1256 if(!x) {
1257 verbose(VERB_ALGO, "dnstap io, %s, SSL "
1258 "connection failed no certificate",
1259 dtio->ip_str);
1260 return 0;
1261 }
1262 log_cert(VERB_ALGO, "dnstap io, peer certificate",
1263 x);
1264 #ifdef HAVE_SSL_GET0_PEERNAME
1265 if(SSL_get0_peername(dtio->ssl)) {
1266 verbose(VERB_ALGO, "dnstap io, %s, SSL "
1267 "connection to %s authenticated",
1268 dtio->ip_str,
1269 SSL_get0_peername(dtio->ssl));
1270 } else {
1271 #endif
1272 verbose(VERB_ALGO, "dnstap io, %s, SSL "
1273 "connection authenticated",
1274 dtio->ip_str);
1275 #ifdef HAVE_SSL_GET0_PEERNAME
1276 }
1277 #endif
1278 X509_free(x);
1279 } else {
1280 X509* x = SSL_get_peer_certificate(dtio->ssl);
1281 if(x) {
1282 log_cert(VERB_ALGO, "dnstap io, peer "
1283 "certificate", x);
1284 X509_free(x);
1285 }
1286 verbose(VERB_ALGO, "dnstap io, %s, SSL connection "
1287 "failed: failed to authenticate",
1288 dtio->ip_str);
1289 return 0;
1290 }
1291 } else {
1292 /* unauthenticated, the verify peer flag was not set
1293 * in ssl when the ssl object was created from ssl_ctx */
1294 verbose(VERB_ALGO, "dnstap io, %s, SSL connection",
1295 dtio->ip_str);
1296 }
1297 return 1;
1298 }
1299 #endif /* HAVE_SSL */
1300
1301 #ifdef HAVE_SSL
1302 /** perform ssl handshake, returns 1 if okay, 0 to stop */
1303 static int dtio_ssl_handshake(struct dt_io_thread* dtio,
1304 struct stop_flush_info* info)
1305 {
1306 int r;
1307 if(dtio->ssl_brief_read) {
1308 /* assume the brief read condition is satisfied,
1309 * if we need more or again, we can set it again */
1310 if(!dtio_disable_brief_read(dtio)) {
1311 if(info) dtio_stop_flush_exit(info);
1312 return 0;
1313 }
1314 }
1315 if(dtio->ssl_handshake_done)
1316 return 1;
1317
1318 ERR_clear_error();
1319 r = SSL_do_handshake(dtio->ssl);
1320 if(r != 1) {
1321 int want = SSL_get_error(dtio->ssl, r);
1322 if(want == SSL_ERROR_WANT_READ) {
1323 /* we want to read on the connection */
1324 if(!dtio_enable_brief_read(dtio)) {
1325 if(info) dtio_stop_flush_exit(info);
1326 return 0;
1327 }
1328 return 0;
1329 } else if(want == SSL_ERROR_WANT_WRITE) {
1330 /* we want to write on the connection */
1331 return 0;
1332 } else if(r == 0) {
1333 /* closed */
1334 if(info) dtio_stop_flush_exit(info);
1335 dtio_del_output_event(dtio);
1336 dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW);
1337 dtio_close_output(dtio);
1338 return 0;
1339 } else if(want == SSL_ERROR_SYSCALL) {
1340 /* SYSCALL and errno==0 means closed uncleanly */
1341 int silent = 0;
1342 #ifdef EPIPE
1343 if(errno == EPIPE && verbosity < 2)
1344 silent = 1; /* silence 'broken pipe' */
1345 #endif
1346 #ifdef ECONNRESET
1347 if(errno == ECONNRESET && verbosity < 2)
1348 silent = 1; /* silence reset by peer */
1349 #endif
1350 if(errno == 0)
1351 silent = 1;
1352 if(!silent)
1353 log_err("dnstap io, SSL_handshake syscall: %s",
1354 strerror(errno));
1355 /* closed */
1356 if(info) dtio_stop_flush_exit(info);
1357 dtio_del_output_event(dtio);
1358 dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW);
1359 dtio_close_output(dtio);
1360 return 0;
1361 } else {
1362 unsigned long err = ERR_get_error();
1363 if(!squelch_err_ssl_handshake(err)) {
1364 log_crypto_err_code("dnstap io, ssl handshake failed",
1365 err);
1366 verbose(VERB_OPS, "dnstap io, ssl handshake failed "
1367 "from %s", dtio->ip_str);
1368 }
1369 /* closed */
1370 if(info) dtio_stop_flush_exit(info);
1371 dtio_del_output_event(dtio);
1372 dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW);
1373 dtio_close_output(dtio);
1374 return 0;
1375 }
1376
1377 }
1378 /* check peer verification */
1379 dtio->ssl_handshake_done = 1;
1380
1381 if(!dtio_ssl_check_peer(dtio)) {
1382 /* closed */
1383 if(info) dtio_stop_flush_exit(info);
1384 dtio_del_output_event(dtio);
1385 dtio_reconnect_slow(dtio, DTIO_RECONNECT_TIMEOUT_SLOW);
1386 dtio_close_output(dtio);
1387 return 0;
1388 }
1389 return 1;
1390 }
1391 #endif /* HAVE_SSL */
1392
1393 /** callback for the dnstap events, to write to the output */
1394 void dtio_output_cb(int ATTR_UNUSED(fd), short bits, void* arg)
1395 {
1396 struct dt_io_thread* dtio = (struct dt_io_thread*)arg;
1397 int i;
1398
1399 if(dtio->check_nb_connect) {
1400 int connect_err = dtio_check_nb_connect(dtio);
1401 if(connect_err == -1) {
1402 /* close the channel */
1403 dtio_del_output_event(dtio);
1404 dtio_close_output(dtio);
1405 return;
1406 } else if(connect_err == 0) {
1407 /* try again later */
1408 return;
1409 }
1410 /* nonblocking connect check passed, continue */
1411 }
1412
1413 #ifdef HAVE_SSL
1414 if(dtio->ssl &&
1415 (!dtio->ssl_handshake_done || dtio->ssl_brief_read)) {
1416 if(!dtio_ssl_handshake(dtio, NULL))
1417 return;
1418 }
1419 #endif
1420
1421 if((bits&UB_EV_READ || dtio->ssl_brief_write)) {
1422 if(dtio->ssl_brief_write)
1423 (void)dtio_disable_brief_write(dtio);
1424 if(dtio->ready_frame_sent && !dtio->accept_frame_received) {
1425 if(dtio_read_accept_frame(dtio) <= 0)
1426 return;
1427 } else if(!dtio_check_close(dtio))
1428 return;
1429 }
1430
1431 /* loop to process a number of messages. This improves throughput,
1432 * because selecting on write-event if not needed for busy messages
1433 * (dnstap log) generation and if they need to all be written back.
1434 * The write event is usually not blocked up. But not forever,
1435 * because the event loop needs to stay responsive for other events.
1436 * If there are no (more) messages, or if the output buffers get
1437 * full, it returns out of the loop. */
1438 for(i=0; i<DTIO_MESSAGES_PER_CALLBACK; i++) {
1439 /* see if there are messages that need writing */
1440 if(!dtio->cur_msg) {
1441 if(!dtio_find_msg(dtio)) {
1442 if(i == 0) {
1443 /* no messages on the first iteration,
1444 * the queues are all empty */
1445 dtio_sleep(dtio);
1446 }
1447 return; /* nothing to do */
1448 }
1449 }
1450
1451 /* write it */
1452 if(dtio->cur_msg_done < dtio->cur_msg_len) {
1453 if(!dtio_write_more(dtio))
1454 return;
1455 }
1456
1457 /* done with the current message */
1458 dtio_cur_msg_free(dtio);
1459
1460 /* If this is a bidirectional stream the first message will be
1461 * the READY control frame. We can only continue writing after
1462 * receiving an ACCEPT control frame. */
1463 if(dtio->is_bidirectional && !dtio->ready_frame_sent) {
1464 dtio->ready_frame_sent = 1;
1465 (void)dtio_add_output_event_read(dtio);
1466 break;
1467 }
1468 }
1469 }
1470
1471 /** callback for the dnstap commandpipe, to stop the dnstap IO */
1472 void dtio_cmd_cb(int fd, short ATTR_UNUSED(bits), void* arg)
1473 {
1474 struct dt_io_thread* dtio = (struct dt_io_thread*)arg;
1475 uint8_t cmd;
1476 ssize_t r;
1477 if(dtio->want_to_exit)
1478 return;
1479 r = read(fd, &cmd, sizeof(cmd));
1480 if(r == -1) {
1481 #ifndef USE_WINSOCK
1482 if(errno == EINTR || errno == EAGAIN)
1483 return; /* ignore this */
1484 log_err("dnstap io: failed to read: %s", strerror(errno));
1485 #else
1486 if(WSAGetLastError() == WSAEINPROGRESS)
1487 return;
1488 if(WSAGetLastError() == WSAEWOULDBLOCK)
1489 return;
1490 log_err("dnstap io: failed to read: %s",
1491 wsa_strerror(WSAGetLastError()));
1492 #endif
1493 /* and then fall through to quit the thread */
1494 } else if(r == 0) {
1495 verbose(VERB_ALGO, "dnstap io: cmd channel closed");
1496 } else if(r == 1 && cmd == DTIO_COMMAND_STOP) {
1497 verbose(VERB_ALGO, "dnstap io: cmd channel cmd quit");
1498 } else if(r == 1 && cmd == DTIO_COMMAND_WAKEUP) {
1499 verbose(VERB_ALGO, "dnstap io: cmd channel cmd wakeup");
1500
1501 if(dtio->is_bidirectional && !dtio->accept_frame_received) {
1502 verbose(VERB_ALGO, "dnstap io: cmd wakeup ignored, "
1503 "waiting for ACCEPT control frame");
1504 return;
1505 }
1506
1507 /* reregister event */
1508 if(!dtio_add_output_event_write(dtio))
1509 return;
1510 return;
1511 } else if(r == 1) {
1512 verbose(VERB_ALGO, "dnstap io: cmd channel unknown command");
1513 }
1514 dtio->want_to_exit = 1;
1515 if(ub_event_base_loopexit((struct ub_event_base*)dtio->event_base)
1516 != 0) {
1517 log_err("dnstap io: could not loopexit");
1518 }
1519 }
1520
1521 #ifndef THREADS_DISABLED
1522 /** setup the event base for the dnstap io thread */
1523 static void dtio_setup_base(struct dt_io_thread* dtio, time_t* secs,
1524 struct timeval* now)
1525 {
1526 memset(now, 0, sizeof(*now));
1527 dtio->event_base = ub_default_event_base(0, secs, now);
1528 if(!dtio->event_base) {
1529 fatal_exit("dnstap io: could not create event_base");
1530 }
1531 }
1532 #endif /* THREADS_DISABLED */
1533
1534 /** setup the cmd event for dnstap io */
1535 static void dtio_setup_cmd(struct dt_io_thread* dtio)
1536 {
1537 struct ub_event* cmdev;
1538 fd_set_nonblock(dtio->commandpipe[0]);
1539 cmdev = ub_event_new(dtio->event_base, dtio->commandpipe[0],
1540 UB_EV_READ | UB_EV_PERSIST, &dtio_cmd_cb, dtio);
1541 if(!cmdev) {
1542 fatal_exit("dnstap io: out of memory");
1543 }
1544 dtio->command_event = cmdev;
1545 if(ub_event_add(cmdev, NULL) != 0) {
1546 fatal_exit("dnstap io: out of memory (adding event)");
1547 }
1548 }
1549
1550 /** setup the reconnect event for dnstap io */
1551 static void dtio_setup_reconnect(struct dt_io_thread* dtio)
1552 {
1553 dtio_reconnect_clear(dtio);
1554 dtio->reconnect_timer = ub_event_new(dtio->event_base, -1,
1555 UB_EV_TIMEOUT, &dtio_reconnect_timeout_cb, dtio);
1556 if(!dtio->reconnect_timer) {
1557 fatal_exit("dnstap io: out of memory");
1558 }
1559 }
1560
1561 /**
1562 * structure to keep track of information during stop flush
1563 */
1564 struct stop_flush_info {
1565 /** the event base during stop flush */
1566 struct ub_event_base* base;
1567 /** did we already want to exit this stop-flush event base */
1568 int want_to_exit_flush;
1569 /** has the timer fired */
1570 int timer_done;
1571 /** the dtio */
1572 struct dt_io_thread* dtio;
1573 /** the stop control frame */
1574 void* stop_frame;
1575 /** length of the stop frame */
1576 size_t stop_frame_len;
1577 /** how much we have done of the stop frame */
1578 size_t stop_frame_done;
1579 };
1580
1581 /** exit the stop flush base */
1582 static void dtio_stop_flush_exit(struct stop_flush_info* info)
1583 {
1584 if(info->want_to_exit_flush)
1585 return;
1586 info->want_to_exit_flush = 1;
1587 if(ub_event_base_loopexit(info->base) != 0) {
1588 log_err("dnstap io: could not loopexit");
1589 }
1590 }
1591
1592 /** send the stop control,
1593 * return true if completed the frame. */
1594 static int dtio_control_stop_send(struct stop_flush_info* info)
1595 {
1596 struct dt_io_thread* dtio = info->dtio;
1597 int r;
1598 if(info->stop_frame_done >= info->stop_frame_len)
1599 return 1;
1600 r = dtio_write_buf(dtio, ((uint8_t*)info->stop_frame) +
1601 info->stop_frame_done, info->stop_frame_len -
1602 info->stop_frame_done);
1603 if(r == -1) {
1604 verbose(VERB_ALGO, "dnstap io: stop flush: output closed");
1605 dtio_stop_flush_exit(info);
1606 return 0;
1607 }
1608 if(r == 0) {
1609 /* try again later, or timeout */
1610 return 0;
1611 }
1612 info->stop_frame_done += r;
1613 if(info->stop_frame_done < info->stop_frame_len)
1614 return 0; /* not done yet */
1615 return 1;
1616 }
1617
1618 void dtio_stop_timer_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(bits),
1619 void* arg)
1620 {
1621 struct stop_flush_info* info = (struct stop_flush_info*)arg;
1622 if(info->want_to_exit_flush)
1623 return;
1624 verbose(VERB_ALGO, "dnstap io: stop flush timer expired, stop flush");
1625 info->timer_done = 1;
1626 dtio_stop_flush_exit(info);
1627 }
1628
1629 void dtio_stop_ev_cb(int ATTR_UNUSED(fd), short bits, void* arg)
1630 {
1631 struct stop_flush_info* info = (struct stop_flush_info*)arg;
1632 struct dt_io_thread* dtio = info->dtio;
1633 if(info->want_to_exit_flush)
1634 return;
1635 if(dtio->check_nb_connect) {
1636 /* we don't start the stop_flush if connect still
1637 * in progress, but the check code is here, just in case */
1638 int connect_err = dtio_check_nb_connect(dtio);
1639 if(connect_err == -1) {
1640 /* close the channel, exit the stop flush */
1641 dtio_stop_flush_exit(info);
1642 dtio_del_output_event(dtio);
1643 dtio_close_output(dtio);
1644 return;
1645 } else if(connect_err == 0) {
1646 /* try again later */
1647 return;
1648 }
1649 /* nonblocking connect check passed, continue */
1650 }
1651 #ifdef HAVE_SSL
1652 if(dtio->ssl &&
1653 (!dtio->ssl_handshake_done || dtio->ssl_brief_read)) {
1654 if(!dtio_ssl_handshake(dtio, info))
1655 return;
1656 }
1657 #endif
1658
1659 if((bits&UB_EV_READ)) {
1660 if(!dtio_check_close(dtio)) {
1661 if(dtio->fd == -1) {
1662 verbose(VERB_ALGO, "dnstap io: "
1663 "stop flush: output closed");
1664 dtio_stop_flush_exit(info);
1665 }
1666 return;
1667 }
1668 }
1669 /* write remainder of last frame */
1670 if(dtio->cur_msg) {
1671 if(dtio->cur_msg_done < dtio->cur_msg_len) {
1672 if(!dtio_write_more(dtio)) {
1673 if(dtio->fd == -1) {
1674 verbose(VERB_ALGO, "dnstap io: "
1675 "stop flush: output closed");
1676 dtio_stop_flush_exit(info);
1677 }
1678 return;
1679 }
1680 }
1681 verbose(VERB_ALGO, "dnstap io: stop flush completed "
1682 "last frame");
1683 dtio_cur_msg_free(dtio);
1684 }
1685 /* write stop frame */
1686 if(info->stop_frame_done < info->stop_frame_len) {
1687 if(!dtio_control_stop_send(info))
1688 return;
1689 verbose(VERB_ALGO, "dnstap io: stop flush completed "
1690 "stop control frame");
1691 }
1692 /* when last frame and stop frame are sent, exit */
1693 dtio_stop_flush_exit(info);
1694 }
1695
1696 /** flush at end, last packet and stop control */
1697 static void dtio_control_stop_flush(struct dt_io_thread* dtio)
1698 {
1699 /* briefly attempt to flush the previous packet to the output,
1700 * this could be a partial packet, or even the start control frame */
1701 time_t secs = 0;
1702 struct timeval now;
1703 struct stop_flush_info info;
1704 struct timeval tv;
1705 struct ub_event* timer, *stopev;
1706
1707 if(dtio->fd == -1 || dtio->check_nb_connect) {
1708 /* no connection or we have just connected, so nothing is
1709 * sent yet, so nothing to stop or flush */
1710 return;
1711 }
1712 if(dtio->ssl && !dtio->ssl_handshake_done) {
1713 /* no SSL connection has been established yet */
1714 return;
1715 }
1716
1717 memset(&info, 0, sizeof(info));
1718 memset(&now, 0, sizeof(now));
1719 info.dtio = dtio;
1720 info.base = ub_default_event_base(0, &secs, &now);
1721 if(!info.base) {
1722 log_err("dnstap io: malloc failure");
1723 return;
1724 }
1725 timer = ub_event_new(info.base, -1, UB_EV_TIMEOUT,
1726 &dtio_stop_timer_cb, &info);
1727 if(!timer) {
1728 log_err("dnstap io: malloc failure");
1729 ub_event_base_free(info.base);
1730 return;
1731 }
1732 memset(&tv, 0, sizeof(tv));
1733 tv.tv_sec = 2;
1734 if(ub_timer_add(timer, info.base, &dtio_stop_timer_cb, &info,
1735 &tv) != 0) {
1736 log_err("dnstap io: cannot event_timer_add");
1737 ub_event_free(timer);
1738 ub_event_base_free(info.base);
1739 return;
1740 }
1741 stopev = ub_event_new(info.base, dtio->fd, UB_EV_READ |
1742 UB_EV_WRITE | UB_EV_PERSIST, &dtio_stop_ev_cb, &info);
1743 if(!stopev) {
1744 log_err("dnstap io: malloc failure");
1745 ub_timer_del(timer);
1746 ub_event_free(timer);
1747 ub_event_base_free(info.base);
1748 return;
1749 }
1750 if(ub_event_add(stopev, NULL) != 0) {
1751 log_err("dnstap io: cannot event_add");
1752 ub_event_free(stopev);
1753 ub_timer_del(timer);
1754 ub_event_free(timer);
1755 ub_event_base_free(info.base);
1756 return;
1757 }
1758 info.stop_frame = fstrm_create_control_frame_stop(
1759 &info.stop_frame_len);
1760 if(!info.stop_frame) {
1761 log_err("dnstap io: malloc failure");
1762 ub_event_del(stopev);
1763 ub_event_free(stopev);
1764 ub_timer_del(timer);
1765 ub_event_free(timer);
1766 ub_event_base_free(info.base);
1767 return;
1768 }
1769 dtio->stop_flush_event = stopev;
1770
1771 /* wait briefly, or until finished */
1772 verbose(VERB_ALGO, "dnstap io: stop flush started");
1773 if(ub_event_base_dispatch(info.base) < 0) {
1774 log_err("dnstap io: dispatch flush failed, errno is %s",
1775 strerror(errno));
1776 }
1777 verbose(VERB_ALGO, "dnstap io: stop flush ended");
1778 free(info.stop_frame);
1779 dtio->stop_flush_event = NULL;
1780 ub_event_del(stopev);
1781 ub_event_free(stopev);
1782 ub_timer_del(timer);
1783 ub_event_free(timer);
1784 ub_event_base_free(info.base);
1785 }
1786
1787 /** perform desetup and free stuff when the dnstap io thread exits */
1788 static void dtio_desetup(struct dt_io_thread* dtio)
1789 {
1790 dtio_control_stop_flush(dtio);
1791 dtio_del_output_event(dtio);
1792 dtio_close_output(dtio);
1793 ub_event_del(dtio->command_event);
1794 ub_event_free(dtio->command_event);
1795 #ifndef USE_WINSOCK
1796 close(dtio->commandpipe[0]);
1797 #else
1798 _close(dtio->commandpipe[0]);
1799 #endif
1800 dtio->commandpipe[0] = -1;
1801 dtio_reconnect_del(dtio);
1802 ub_event_free(dtio->reconnect_timer);
1803 dtio_cur_msg_free(dtio);
1804 #ifndef THREADS_DISABLED
1805 ub_event_base_free(dtio->event_base);
1806 #endif
1807 }
1808
1809 /** setup a start control message */
1810 static int dtio_control_start_send(struct dt_io_thread* dtio)
1811 {
1812 log_assert(dtio->cur_msg == NULL && dtio->cur_msg_len == 0);
1813 dtio->cur_msg = fstrm_create_control_frame_start(DNSTAP_CONTENT_TYPE,
1814 &dtio->cur_msg_len);
1815 if(!dtio->cur_msg) {
1816 return 0;
1817 }
1818 /* setup to send the control message */
1819 /* set that the buffer needs to be sent, but the length
1820 * of that buffer is already written, that way the buffer can
1821 * start with 0 length and then the length of the control frame
1822 * in it */
1823 dtio->cur_msg_done = 0;
1824 dtio->cur_msg_len_done = 4;
1825 return 1;
1826 }
1827
1828 /** setup a ready control message */
1829 static int dtio_control_ready_send(struct dt_io_thread* dtio)
1830 {
1831 log_assert(dtio->cur_msg == NULL && dtio->cur_msg_len == 0);
1832 dtio->cur_msg = fstrm_create_control_frame_ready(DNSTAP_CONTENT_TYPE,
1833 &dtio->cur_msg_len);
1834 if(!dtio->cur_msg) {
1835 return 0;
1836 }
1837 /* setup to send the control message */
1838 /* set that the buffer needs to be sent, but the length
1839 * of that buffer is already written, that way the buffer can
1840 * start with 0 length and then the length of the control frame
1841 * in it */
1842 dtio->cur_msg_done = 0;
1843 dtio->cur_msg_len_done = 4;
1844 return 1;
1845 }
1846
1847 /** open the output file descriptor for af_local */
1848 static int dtio_open_output_local(struct dt_io_thread* dtio)
1849 {
1850 #ifdef HAVE_SYS_UN_H
1851 struct sockaddr_un s;
1852 dtio->fd = socket(AF_LOCAL, SOCK_STREAM, 0);
1853 if(dtio->fd == -1) {
1854 #ifndef USE_WINSOCK
1855 log_err("dnstap io: failed to create socket: %s",
1856 strerror(errno));
1857 #else
1858 log_err("dnstap io: failed to create socket: %s",
1859 wsa_strerror(WSAGetLastError()));
1860 #endif
1861 return 0;
1862 }
1863 memset(&s, 0, sizeof(s));
1864 #ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN
1865 /* this member exists on BSDs, not Linux */
1866 s.sun_len = (unsigned)sizeof(s);
1867 #endif
1868 s.sun_family = AF_LOCAL;
1869 /* length is 92-108, 104 on FreeBSD */
1870 (void)strlcpy(s.sun_path, dtio->socket_path, sizeof(s.sun_path));
1871 fd_set_nonblock(dtio->fd);
1872 if(connect(dtio->fd, (struct sockaddr*)&s, (socklen_t)sizeof(s))
1873 == -1) {
1874 char* to = dtio->socket_path;
1875 #ifndef USE_WINSOCK
1876 log_err("dnstap io: failed to connect to \"%s\": %s",
1877 to, strerror(errno));
1878 #else
1879 log_err("dnstap io: failed to connect to \"%s\": %s",
1880 to, wsa_strerror(WSAGetLastError()));
1881 #endif
1882 dtio_close_fd(dtio);
1883 return 0;
1884 }
1885 return 1;
1886 #else
1887 log_err("cannot create af_local socket");
1888 return 0;
1889 #endif /* HAVE_SYS_UN_H */
1890 }
1891
1892 /** open the output file descriptor for af_inet and af_inet6 */
1893 static int dtio_open_output_tcp(struct dt_io_thread* dtio)
1894 {
1895 struct sockaddr_storage addr;
1896 socklen_t addrlen;
1897 memset(&addr, 0, sizeof(addr));
1898 addrlen = (socklen_t)sizeof(addr);
1899
1900 if(!extstrtoaddr(dtio->ip_str, &addr, &addrlen)) {
1901 log_err("could not parse IP '%s'", dtio->ip_str);
1902 return 0;
1903 }
1904 dtio->fd = socket(addr.ss_family, SOCK_STREAM, 0);
1905 if(dtio->fd == -1) {
1906 #ifndef USE_WINSOCK
1907 log_err("can't create socket: %s", strerror(errno));
1908 #else
1909 log_err("can't create socket: %s",
1910 wsa_strerror(WSAGetLastError()));
1911 #endif
1912 return 0;
1913 }
1914 fd_set_nonblock(dtio->fd);
1915 if(connect(dtio->fd, (struct sockaddr*)&addr, addrlen) == -1) {
1916 if(errno == EINPROGRESS)
1917 return 1; /* wait until connect done*/
1918 #ifndef USE_WINSOCK
1919 if(tcp_connect_errno_needs_log(
1920 (struct sockaddr *)&addr, addrlen)) {
1921 log_err("dnstap io: failed to connect to %s: %s",
1922 dtio->ip_str, strerror(errno));
1923 }
1924 #else
1925 if(WSAGetLastError() == WSAEINPROGRESS ||
1926 WSAGetLastError() == WSAEWOULDBLOCK)
1927 return 1; /* wait until connect done*/
1928 if(tcp_connect_errno_needs_log(
1929 (struct sockaddr *)&addr, addrlen)) {
1930 log_err("dnstap io: failed to connect to %s: %s",
1931 dtio->ip_str, wsa_strerror(WSAGetLastError()));
1932 }
1933 #endif
1934 dtio_close_fd(dtio);
1935 return 0;
1936 }
1937 return 1;
1938 }
1939
1940 /** setup the SSL structure for new connection */
1941 static int dtio_setup_ssl(struct dt_io_thread* dtio)
1942 {
1943 dtio->ssl = outgoing_ssl_fd(dtio->ssl_ctx, dtio->fd);
1944 if(!dtio->ssl) return 0;
1945 dtio->ssl_handshake_done = 0;
1946 dtio->ssl_brief_read = 0;
1947
1948 if(!set_auth_name_on_ssl(dtio->ssl, dtio->tls_server_name,
1949 dtio->tls_use_sni)) {
1950 return 0;
1951 }
1952 return 1;
1953 }
1954
1955 /** open the output file descriptor */
1956 static void dtio_open_output(struct dt_io_thread* dtio)
1957 {
1958 struct ub_event* ev;
1959 if(dtio->upstream_is_unix) {
1960 if(!dtio_open_output_local(dtio)) {
1961 dtio_reconnect_enable(dtio);
1962 return;
1963 }
1964 } else if(dtio->upstream_is_tcp || dtio->upstream_is_tls) {
1965 if(!dtio_open_output_tcp(dtio)) {
1966 dtio_reconnect_enable(dtio);
1967 return;
1968 }
1969 if(dtio->upstream_is_tls) {
1970 if(!dtio_setup_ssl(dtio)) {
1971 dtio_close_fd(dtio);
1972 dtio_reconnect_enable(dtio);
1973 return;
1974 }
1975 }
1976 }
1977 dtio->check_nb_connect = 1;
1978
1979 /* the EV_READ is to read ACCEPT control messages, and catch channel
1980 * close. EV_WRITE is to write packets */
1981 ev = ub_event_new(dtio->event_base, dtio->fd,
1982 UB_EV_READ | UB_EV_WRITE | UB_EV_PERSIST, &dtio_output_cb,
1983 dtio);
1984 if(!ev) {
1985 log_err("dnstap io: out of memory");
1986 if(dtio->ssl) {
1987 #ifdef HAVE_SSL
1988 SSL_free(dtio->ssl);
1989 dtio->ssl = NULL;
1990 #endif
1991 }
1992 dtio_close_fd(dtio);
1993 dtio_reconnect_enable(dtio);
1994 return;
1995 }
1996 dtio->event = ev;
1997
1998 /* setup protocol control message to start */
1999 if((!dtio->is_bidirectional && !dtio_control_start_send(dtio)) ||
2000 (dtio->is_bidirectional && !dtio_control_ready_send(dtio)) ) {
2001 log_err("dnstap io: out of memory");
2002 ub_event_free(dtio->event);
2003 dtio->event = NULL;
2004 if(dtio->ssl) {
2005 #ifdef HAVE_SSL
2006 SSL_free(dtio->ssl);
2007 dtio->ssl = NULL;
2008 #endif
2009 }
2010 dtio_close_fd(dtio);
2011 dtio_reconnect_enable(dtio);
2012 return;
2013 }
2014 }
2015
2016 /** perform the setup of the writer thread on the established event_base */
2017 static void dtio_setup_on_base(struct dt_io_thread* dtio)
2018 {
2019 dtio_setup_cmd(dtio);
2020 dtio_setup_reconnect(dtio);
2021 dtio_open_output(dtio);
2022 if(!dtio_add_output_event_write(dtio))
2023 return;
2024 }
2025
2026 #ifndef THREADS_DISABLED
2027 /** the IO thread function for the DNSTAP IO */
2028 static void* dnstap_io(void* arg)
2029 {
2030 struct dt_io_thread* dtio = (struct dt_io_thread*)arg;
2031 time_t secs = 0;
2032 struct timeval now;
2033 log_thread_set(&dtio->threadnum);
2034
2035 /* setup */
2036 verbose(VERB_ALGO, "start dnstap io thread");
2037 dtio_setup_base(dtio, &secs, &now);
2038 dtio_setup_on_base(dtio);
2039
2040 /* run */
2041 if(ub_event_base_dispatch(dtio->event_base) < 0) {
2042 log_err("dnstap io: dispatch failed, errno is %s",
2043 strerror(errno));
2044 }
2045
2046 /* cleanup */
2047 verbose(VERB_ALGO, "stop dnstap io thread");
2048 dtio_desetup(dtio);
2049 return NULL;
2050 }
2051 #endif /* THREADS_DISABLED */
2052
2053 int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr,
2054 int numworkers)
2055 {
2056 /* set up the thread, can fail */
2057 #ifndef USE_WINSOCK
2058 if(pipe(dtio->commandpipe) == -1) {
2059 log_err("failed to create pipe: %s", strerror(errno));
2060 return 0;
2061 }
2062 #else
2063 if(_pipe(dtio->commandpipe, 4096, _O_BINARY) == -1) {
2064 log_err("failed to create _pipe: %s",
2065 wsa_strerror(WSAGetLastError()));
2066 return 0;
2067 }
2068 #endif
2069
2070 /* start the thread */
2071 dtio->threadnum = numworkers+1;
2072 dtio->started = 1;
2073 #ifndef THREADS_DISABLED
2074 ub_thread_create(&dtio->tid, dnstap_io, dtio);
2075 (void)event_base_nothr;
2076 #else
2077 dtio->event_base = event_base_nothr;
2078 dtio_setup_on_base(dtio);
2079 #endif
2080 return 1;
2081 }
2082
2083 void dt_io_thread_stop(struct dt_io_thread* dtio)
2084 {
2085 #ifndef THREADS_DISABLED
2086 uint8_t cmd = DTIO_COMMAND_STOP;
2087 #endif
2088 if(!dtio) return;
2089 if(!dtio->started) return;
2090 verbose(VERB_ALGO, "dnstap io: send stop cmd");
2091
2092 #ifndef THREADS_DISABLED
2093 while(1) {
2094 ssize_t r = write(dtio->commandpipe[1], &cmd, sizeof(cmd));
2095 if(r == -1) {
2096 #ifndef USE_WINSOCK
2097 if(errno == EINTR || errno == EAGAIN)
2098 continue;
2099 log_err("dnstap io stop: write: %s", strerror(errno));
2100 #else
2101 if(WSAGetLastError() == WSAEINPROGRESS)
2102 continue;
2103 if(WSAGetLastError() == WSAEWOULDBLOCK)
2104 continue;
2105 log_err("dnstap io stop: write: %s",
2106 wsa_strerror(WSAGetLastError()));
2107 #endif
2108 break;
2109 }
2110 break;
2111 }
2112 dtio->started = 0;
2113 #endif /* THREADS_DISABLED */
2114
2115 #ifndef USE_WINSOCK
2116 close(dtio->commandpipe[1]);
2117 #else
2118 _close(dtio->commandpipe[1]);
2119 #endif
2120 dtio->commandpipe[1] = -1;
2121 #ifndef THREADS_DISABLED
2122 ub_thread_join(dtio->tid);
2123 #else
2124 dtio->want_to_exit = 1;
2125 dtio_desetup(dtio);
2126 #endif
2127 }
0 /*
1 * dnstap/dtstream.h - Frame Streams thread for unbound DNSTAP
2 *
3 * Copyright (c) 2020, NLnet Labs. All rights reserved.
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NLNET LABS nor the names of its contributors may
19 * be used to endorse or promote products derived from this software without
20 * specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 */
35
36 /**
37 * \file
38 *
39 * An implementation of the Frame Streams data transport protocol for
40 * the Unbound DNSTAP message logging facility.
41 */
42
43 #ifndef DTSTREAM_H
44 #define DTSTREAM_H
45
46 #include "util/locks.h"
47 struct dt_msg_entry;
48 struct dt_io_list_item;
49 struct dt_io_thread;
50 struct config_file;
51
52 /**
53 * A message buffer with dnstap messages queued up. It is per-worker.
54 * It has locks to synchronize. If the buffer is full, a new message
55 * cannot be added and is discarded. A thread reads the messages and sends
56 * them.
57 */
58 struct dt_msg_queue {
59 /** lock of the buffer structure. Hold this lock to add or remove
60 * entries to the buffer. Release it so that other threads can also
61 * put messages to log, or a message can be taken out to send away
62 * by the writer thread.
63 */
64 lock_basic_type lock;
65 /** the maximum size of the buffer, in bytes */
66 size_t maxsize;
67 /** current size of the buffer, in bytes. data bytes of messages.
68 * If a new message make it more than maxsize, the buffer is full */
69 size_t cursize;
70 /** list of messages. The messages are added to the back and taken
71 * out from the front. */
72 struct dt_msg_entry* first, *last;
73 /** reference to the io thread to wakeup */
74 struct dt_io_thread* dtio;
75 };
76
77 /**
78 * An entry in the dt_msg_queue. contains one DNSTAP message.
79 * It is malloced.
80 */
81 struct dt_msg_entry {
82 /** next in the list. */
83 struct dt_msg_entry* next;
84 /** the buffer with the data to send, an encoded DNSTAP message */
85 void* buf;
86 /** the length to send. */
87 size_t len;
88 };
89
90 /**
91 * Containing buffer and counter for reading DNSTAP frames.
92 */
93 struct dt_frame_read_buf {
94 /** Buffer containing frame, except length counter(s). */
95 void* buf;
96 /** Number of bytes written to buffer. */
97 size_t buf_count;
98 /** Capacity of the buffer. */
99 size_t buf_cap;
100
101 /** Frame length field. Will contain the 2nd length field for control
102 * frames. */
103 uint32_t frame_len;
104 /** Number of bytes that have been written to the frame_length field. */
105 size_t frame_len_done;
106
107 /** Set to 1 if this is a control frame, 0 otherwise (ie data frame). */
108 int control_frame;
109 };
110
111 /**
112 * IO thread that reads from the queues and writes them.
113 */
114 struct dt_io_thread {
115 /** the thread number for the dtio thread,
116 * must be first to cast thread arg to int* in checklock code. */
117 int threadnum;
118 /** event base, for event handling */
119 void* event_base;
120 /** list of queues that is registered to get written */
121 struct dt_io_list_item* io_list;
122 /** iterator point in the io_list, to pick from them in a
123 * round-robin fashion, instead of only from the first when busy.
124 * if NULL it means start at the start of the list. */
125 struct dt_io_list_item* io_list_iter;
126 /** thread id, of the io thread */
127 ub_thread_type tid;
128 /** if the io processing has started */
129 int started;
130 /** ssl context for the io thread, for tls connections. type SSL_CTX* */
131 void* ssl_ctx;
132 /** if SNI will be used for TLS connections. */
133 int tls_use_sni;
134
135 /** file descriptor that the thread writes to */
136 int fd;
137 /** event structure that the thread uses */
138 void* event;
139 /** the event is added */
140 int event_added;
141 /** event added is a write event */
142 int event_added_is_write;
143 /** check for nonblocking connect errors on fd */
144 int check_nb_connect;
145 /** ssl for current connection, type SSL* */
146 void* ssl;
147 /** true if the handshake for SSL is done, 0 if not */
148 int ssl_handshake_done;
149 /** true if briefly the SSL wants a read event, 0 if not.
150 * This happens during negotiation, we then do not want to write,
151 * but wait for a read event. */
152 int ssl_brief_read;
153 /** true if SSL_read is waiting for a write event. Set back to 0 after
154 * single write event is handled. */
155 int ssl_brief_write;
156
157 /** the buffer that currently getting written, or NULL if no
158 * (partial) message written now */
159 void* cur_msg;
160 /** length of the current message */
161 size_t cur_msg_len;
162 /** number of bytes written for the current message */
163 size_t cur_msg_done;
164 /** number of bytes of the length that have been written,
165 * for the current message length that precedes the frame */
166 size_t cur_msg_len_done;
167
168 /** command pipe that stops the pipe if closed. Used to quit
169 * the program. [0] is read, [1] is written to. */
170 int commandpipe[2];
171 /** the event to listen to the commandpipe */
172 void* command_event;
173 /** the io thread wants to exit */
174 int want_to_exit;
175
176 /** in stop flush, this is nonNULL and references the stop_ev */
177 void* stop_flush_event;
178
179 /** the timer event for connection retries */
180 void* reconnect_timer;
181 /** if the reconnect timer is added to the event base */
182 int reconnect_is_added;
183 /** the current reconnection timeout, it is increased with
184 * exponential backoff, in msec */
185 int reconnect_timeout;
186
187 /** If the log server is connected to over unix domain sockets,
188 * eg. a file is named that is created to log onto. */
189 int upstream_is_unix;
190 /** if the log server is connected to over TCP. The ip address and
191 * port are used */
192 int upstream_is_tcp;
193 /** if the log server is connected to over TLS. ip address, port,
194 * and client certificates can be used for authentication. */
195 int upstream_is_tls;
196
197 /** Perform bidirectional Frame Streams handshake before sending
198 * messages. */
199 int is_bidirectional;
200 /** Set if the READY control frame has been sent. */
201 int ready_frame_sent;
202 /** Set if valid ACCEPT frame is received. */
203 int accept_frame_received;
204 /** (partially) read frame */
205 struct dt_frame_read_buf read_frame;
206
207 /** the file path for unix socket (or NULL) */
208 char* socket_path;
209 /** the ip address and port number (or NULL) */
210 char* ip_str;
211 /** is the TLS upstream authenticated by name, if nonNULL,
212 * we use the same cert bundle as used by other TLS streams. */
213 char* tls_server_name;
214 /** are client certificates in use */
215 int use_client_certs;
216 /** client cert files: the .key file */
217 char* client_key_file;
218 /** client cert files: the .pem file */
219 char* client_cert_file;
220 };
221
222 /**
223 * IO thread list of queues list item
224 * lists a worker queue that should be looked at and sent to the log server.
225 */
226 struct dt_io_list_item {
227 /** next in the list of buffers to inspect */
228 struct dt_io_list_item* next;
229 /** buffer of this worker */
230 struct dt_msg_queue* queue;
231 };
232
233 /**
234 * Create new (empty) worker message queue. Limit set to default on max.
235 * @return NULL on malloc failure or a new queue (not locked).
236 */
237 struct dt_msg_queue* dt_msg_queue_create(void);
238
239 /**
240 * Delete a worker message queue. It has to be unlinked from access,
241 * so it can be deleted without lock worries. The queue is emptied (deleted).
242 * @param mq: message queue.
243 */
244 void dt_msg_queue_delete(struct dt_msg_queue* mq);
245
246 /**
247 * Submit a message to the queue. The queue is locked by the routine,
248 * the message is inserted, and then the queue is unlocked so the
249 * message can be picked up by the writer thread.
250 * @param mq: message queue.
251 * @param buf: buffer with message (dnstap contents).
252 * The buffer must have been malloced by caller. It is linked in
253 * the queue, and is free()d after use. If the routine fails
254 * the buffer is freed as well (and nothing happens, the item
255 * could not be logged).
256 * @param len: length of buffer.
257 */
258 void dt_msg_queue_submit(struct dt_msg_queue* mq, void* buf, size_t len);
259
260 /**
261 * Create IO thread.
262 * @return new io thread object. not yet started. or NULL malloc failure.
263 */
264 struct dt_io_thread* dt_io_thread_create(void);
265
266 /**
267 * Delete the IO thread structure.
268 * @param dtio: the io thread that is deleted. It must not be running.
269 */
270 void dt_io_thread_delete(struct dt_io_thread* dtio);
271
272 /**
273 * Apply config to the dtio thread
274 * @param dtio: io thread, not yet started.
275 * @param cfg: config file struct.
276 * @return false on malloc failure.
277 */
278 int dt_io_thread_apply_cfg(struct dt_io_thread* dtio,
279 struct config_file *cfg);
280
281 /**
282 * Register a msg queue to the io thread. It will be polled to see if
283 * there are messages and those then get removed and sent, when the thread
284 * is running.
285 * @param dtio: the io thread.
286 * @param mq: message queue to register.
287 * @return false on failure (malloc failure).
288 */
289 int dt_io_thread_register_queue(struct dt_io_thread* dtio,
290 struct dt_msg_queue* mq);
291
292 /**
293 * Unregister queue from io thread.
294 * @param dtio: the io thread.
295 * @param mq: message queue.
296 */
297 void dt_io_thread_unregister_queue(struct dt_io_thread* dtio,
298 struct dt_msg_queue* mq);
299
300 /**
301 * Start the io thread
302 * @param dtio: the io thread.
303 * @param event_base_nothr: the event base to attach the events to, in case
304 * we are running without threads. With threads, this is ignored
305 * and a thread is started to process the dnstap log messages.
306 * @param numworkers: number of worker threads. The dnstap io thread is
307 * that number +1 as the threadnumber (in logs).
308 * @return false on failure.
309 */
310 int dt_io_thread_start(struct dt_io_thread* dtio, void* event_base_nothr,
311 int numworkers);
312
313 /**
314 * Stop the io thread
315 * @param dtio: the io thread.
316 */
317 void dt_io_thread_stop(struct dt_io_thread* dtio);
318
319 /** callback for the dnstap reconnect, to start reconnecting to output */
320 void dtio_reconnect_timeout_cb(int fd, short bits, void* arg);
321
322 /** callback for the dnstap events, to write to the output */
323 void dtio_output_cb(int fd, short bits, void* arg);
324
325 /** callback for the dnstap commandpipe, to stop the dnstap IO */
326 void dtio_cmd_cb(int fd, short bits, void* arg);
327
328 /** callback for the timer when the thread stops and wants to finish up */
329 void dtio_stop_timer_cb(int fd, short bits, void* arg);
330
331 /** callback for the output when the thread stops and wants to finish up */
332 void dtio_stop_ev_cb(int fd, short bits, void* arg);
333
334 /** callback for unbound-dnstap-socket */
335 void dtio_tap_callback(int fd, short bits, void* arg);
336
337 /** callback for unbound-dnstap-socket */
338 void dtio_mainfdcallback(int fd, short bits, void* arg);
339
340 #endif /* DTSTREAM_H */
0 /*
1 * dnstap/unbound-dnstap-socket.c - debug program that listens for DNSTAP logs.
2 *
3 * Copyright (c) 2020, NLnet Labs. All rights reserved.
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * Neither the name of the NLNET LABS nor the names of its contributors may
19 * be used to endorse or promote products derived from this software without
20 * specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
28 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
35 /**
36 * \file
37 *
38 * This program listens on a DNSTAP socket for logged messages.
39 */
40 #include "config.h"
41 #ifdef HAVE_GETOPT_H
42 #include <getopt.h>
43 #endif
44 #include <signal.h>
45 #include <stdlib.h>
46 #include <unistd.h>
47 #include <signal.h>
48 #include <ctype.h>
49 #ifdef HAVE_SYS_UN_H
50 #include <sys/un.h>
51 #endif
52 #include <openssl/ssl.h>
53 #include <openssl/rand.h>
54 #include <openssl/err.h>
55 #include "dnstap/dtstream.h"
56 #include "dnstap/dnstap_fstrm.h"
57 #include "util/log.h"
58 #include "util/ub_event.h"
59 #include "util/net_help.h"
60 #include "services/listen_dnsport.h"
61 #include "sldns/sbuffer.h"
62 #include "sldns/wire2str.h"
63 #ifdef USE_DNSTAP
64 #include <protobuf-c/protobuf-c.h>
65 #include "dnstap/dnstap.pb-c.h"
66 #endif /* USE_DNSTAP */
67 #include "util/config_file.h"
68
69 /** listen backlog on TCP connections for dnstap logs */
70 #define LISTEN_BACKLOG 16
71
72 /** usage information for streamtcp */
73 static void usage(char* argv[])
74 {
75 printf("usage: %s [options]\n", argv[0]);
76 printf(" Listen to dnstap messages\n");
77 printf("stdout has dnstap log, stderr has verbose server log\n");
78 printf("-u <socketpath> listen to unix socket with this file name\n");
79 printf("-s <serverip[@port]> listen for TCP on the IP and port\n");
80 printf("-t <serverip[@port]> listen for TLS on IP and port\n");
81 printf("-x <server.key> server key file for TLS service\n");
82 printf("-y <server.pem> server cert file for TLS service\n");
83 printf("-z <verify.pem> cert file to verify client connections\n");
84 printf("-l long format for DNS printout\n");
85 printf("-v more verbose log output\n");
86 printf("-h this help text\n");
87 exit(1);
88 }
89
90 /** long format option, for multiline printout per message */
91 static int longformat = 0;
92
93 struct tap_socket_list;
94 struct tap_socket;
95 /** main tap callback data */
96 struct main_tap_data {
97 /** the event base (to loopexit) */
98 struct ub_event_base* base;
99 /** the list of accept sockets */
100 struct tap_socket_list* acceptlist;
101 };
102
103 /** tap callback variables */
104 struct tap_data {
105 /** the fd */
106 int fd;
107 /** the ub event */
108 struct ub_event* ev;
109 /** the SSL for TLS streams */
110 SSL* ssl;
111 /** is the ssl handshake done */
112 int ssl_handshake_done;
113 /** we are briefly waiting to write (in the struct event) */
114 int ssl_brief_write;
115 /** string that identifies the socket (or NULL), like IP address */
116 char* id;
117 /** have we read the length, and how many bytes of it */
118 int len_done;
119 /** have we read the data, and how many bytes of it */
120 size_t data_done;
121 /** are we reading a control frame */
122 int control_frame;
123 /** are we bi-directional (if false, uni-directional) */
124 int is_bidirectional;
125 /** data of the frame */
126 uint8_t* frame;
127 /** length of this frame */
128 size_t len;
129 };
130
131 /** list of sockets */
132 struct tap_socket_list {
133 /** next in list */
134 struct tap_socket_list* next;
135 /** the socket */
136 struct tap_socket* s;
137 };
138
139 /** tap socket */
140 struct tap_socket {
141 /** fd of socket */
142 int fd;
143 /** the event for it */
144 struct ub_event *ev;
145 /** has the event been added */
146 int ev_added;
147 /** the callback, for the event, ev_cb(fd, bits, arg) */
148 void (*ev_cb)(int, short, void*);
149 /** data element, (arg for the tap_socket struct) */
150 void* data;
151 /** socketpath, if this is an AF_LOCAL socket */
152 char* socketpath;
153 /** IP, if this is a TCP socket */
154 char* ip;
155 /** for a TLS socket, the tls context */
156 SSL_CTX* sslctx;
157 };
158
159 /** del the tap event */
160 static void tap_socket_delev(struct tap_socket* s)
161 {
162 if(!s) return;
163 if(!s->ev) return;
164 if(!s->ev_added) return;
165 ub_event_del(s->ev);
166 s->ev_added = 0;
167 }
168
169 /** close the tap socket */
170 static void tap_socket_close(struct tap_socket* s)
171 {
172 if(!s) return;
173 if(s->fd == -1) return;
174 close(s->fd);
175 s->fd = -1;
176 }
177
178 /** delete tap socket */
179 static void tap_socket_delete(struct tap_socket* s)
180 {
181 if(!s) return;
182 #ifdef HAVE_SSL
183 SSL_CTX_free(s->sslctx);
184 #endif
185 ub_event_free(s->ev);
186 free(s->socketpath);
187 free(s->ip);
188 free(s);
189 }
190
191 /** create new socket (unconnected, not base-added), or NULL malloc fail */
192 static struct tap_socket* tap_socket_new_local(char* socketpath,
193 void (*ev_cb)(int, short, void*), void* data)
194 {
195 struct tap_socket* s = calloc(1, sizeof(*s));
196 if(!s) {
197 log_err("malloc failure");
198 return NULL;
199 }
200 s->socketpath = strdup(socketpath);
201 if(!s->socketpath) {
202 free(s);
203 log_err("malloc failure");
204 return NULL;
205 }
206 s->fd = -1;
207 s->ev_cb = ev_cb;
208 s->data = data;
209 return s;
210 }
211
212 /** create new socket (unconnected, not base-added), or NULL malloc fail */
213 static struct tap_socket* tap_socket_new_tcpaccept(char* ip,
214 void (*ev_cb)(int, short, void*), void* data)
215 {
216 struct tap_socket* s = calloc(1, sizeof(*s));
217 if(!s) {
218 log_err("malloc failure");
219 return NULL;
220 }
221 s->ip = strdup(ip);
222 if(!s->ip) {
223 free(s);
224 log_err("malloc failure");
225 return NULL;
226 }
227 s->fd = -1;
228 s->ev_cb = ev_cb;
229 s->data = data;
230 return s;
231 }
232
233 /** create new socket (unconnected, not base-added), or NULL malloc fail */
234 static struct tap_socket* tap_socket_new_tlsaccept(char* ip,
235 void (*ev_cb)(int, short, void*), void* data, char* server_key,
236 char* server_cert, char* verifypem)
237 {
238 struct tap_socket* s = calloc(1, sizeof(*s));
239 if(!s) {
240 log_err("malloc failure");
241 return NULL;
242 }
243 s->ip = strdup(ip);
244 if(!s->ip) {
245 free(s);
246 log_err("malloc failure");
247 return NULL;
248 }
249 s->fd = -1;
250 s->ev_cb = ev_cb;
251 s->data = data;
252 s->sslctx = listen_sslctx_create(server_key, server_cert, verifypem);
253 if(!s->sslctx) {
254 log_err("could not create ssl context");
255 free(s->ip);
256 free(s);
257 return NULL;
258 }
259 return s;
260 }
261
262 /** setup tcp accept socket on IP string */
263 static int make_tcp_accept(char* ip)
264 {
265 #ifdef SO_REUSEADDR
266 int on = 1;
267 #endif
268 struct sockaddr_storage addr;
269 socklen_t len;
270 int s;
271
272 memset(&addr, 0, sizeof(addr));
273 len = (socklen_t)sizeof(addr);
274 if(!extstrtoaddr(ip, &addr, &len)) {
275 log_err("could not parse IP '%s'", ip);
276 return -1;
277 }
278
279 if((s = socket(addr.ss_family, SOCK_STREAM, 0)) == -1) {
280 #ifndef USE_WINSOCK
281 log_err("can't create socket: %s", strerror(errno));
282 #else
283 log_err("can't create socket: %s",
284 wsa_strerror(WSAGetLastError()));
285 #endif
286 return -1;
287 }
288 #ifdef SO_REUSEADDR
289 if(setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*)&on,
290 (socklen_t)sizeof(on)) < 0) {
291 #ifndef USE_WINSOCK
292 log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s",
293 strerror(errno));
294 close(s);
295 #else
296 log_err("setsockopt(.. SO_REUSEADDR ..) failed: %s",
297 wsa_strerror(WSAGetLastError()));
298 closesocket(s);
299 #endif
300 return -1;
301 }
302 #endif /* SO_REUSEADDR */
303 if(bind(s, (struct sockaddr*)&addr, len) != 0) {
304 #ifndef USE_WINSOCK
305 log_err_addr("can't bind socket", strerror(errno),
306 &addr, len);
307 close(s);
308 #else
309 log_err_addr("can't bind socket",
310 wsa_strerror(WSAGetLastError()), &addr, len);
311 closesocket(s);
312 #endif
313 return -1;
314 }
315 if(!fd_set_nonblock(s)) {
316 #ifndef USE_WINSOCK
317 close(s);
318 #else
319 closesocket(s);
320 #endif
321 return -1;
322 }
323 if(listen(s, LISTEN_BACKLOG) == -1) {
324 #ifndef USE_WINSOCK
325 log_err("can't listen: %s", strerror(errno));
326 close(s);
327 #else
328 log_err("can't listen: %s", wsa_strerror(WSAGetLastError()));
329 closesocket(s);
330 #endif
331 return -1;
332 }
333 return s;
334 }
335
336 /** setup socket on event base */
337 static int tap_socket_setup(struct tap_socket* s, struct ub_event_base* base)
338 {
339 if(s->socketpath) {
340 /* AF_LOCAL accept socket */
341 s->fd = create_local_accept_sock(s->socketpath, NULL, 0);
342 if(s->fd == -1) {
343 log_err("could not create local socket");
344 return 0;
345 }
346 } else if(s->ip || s->sslctx) {
347 /* TCP accept socket */
348 s->fd = make_tcp_accept(s->ip);
349 if(s->fd == -1) {
350 log_err("could not create tcp socket");
351 return 0;
352 }
353 }
354 s->ev = ub_event_new(base, s->fd, UB_EV_READ | UB_EV_PERSIST,
355 s->ev_cb, s);
356 if(!s->ev) {
357 log_err("could not ub_event_new");
358 return 0;
359 }
360 if(ub_event_add(s->ev, NULL) != 0) {
361 log_err("could not ub_event_add");
362 return 0;
363 }
364 s->ev_added = 1;
365 return 1;
366 }
367
368 /** add tap socket to list */
369 static int tap_socket_list_insert(struct tap_socket_list** liststart,
370 struct tap_socket* s)
371 {
372 struct tap_socket_list* entry = (struct tap_socket_list*)
373 malloc(sizeof(*entry));
374 if(!entry)
375 return 0;
376 entry->next = *liststart;
377 entry->s = s;
378 *liststart = entry;
379 return 1;
380 }
381
382 /** delete the list */
383 static void tap_socket_list_delete(struct tap_socket_list* list)
384 {
385 struct tap_socket_list* e = list, *next;
386 while(e) {
387 next = e->next;
388 tap_socket_delev(e->s);
389 tap_socket_close(e->s);
390 tap_socket_delete(e->s);
391 free(e);
392 e = next;
393 }
394 }
395
396 /** setup accept events */
397 static int tap_socket_list_addevs(struct tap_socket_list* list,
398 struct ub_event_base* base)
399 {
400 struct tap_socket_list* entry;
401 for(entry = list; entry; entry = entry->next) {
402 if(!tap_socket_setup(entry->s, base)) {
403 log_err("could not setup socket");
404 return 0;
405 }
406 }
407 return 1;
408 }
409
410 #ifdef USE_DNSTAP
411 /** log control frame contents */
412 static void log_control_frame(uint8_t* pkt, size_t len)
413 {
414 char* desc;
415 if(verbosity == 0) return;
416 desc = fstrm_describe_control(pkt, len);
417 if(!desc) {
418 log_err("out of memory");
419 return;
420 }
421 log_info("control frame %s", desc);
422 free(desc);
423 }
424
425 /** convert mtype to string */
426 static const char* mtype_to_str(enum _Dnstap__Message__Type mtype)
427 {
428 switch(mtype) {
429 case DNSTAP__MESSAGE__TYPE__AUTH_QUERY:
430 return "AUTH_QUERY";
431 case DNSTAP__MESSAGE__TYPE__AUTH_RESPONSE:
432 return "AUTH_RESPONSE";
433 case DNSTAP__MESSAGE__TYPE__RESOLVER_QUERY:
434 return "RESOLVER_QUERY";
435 case DNSTAP__MESSAGE__TYPE__RESOLVER_RESPONSE:
436 return "RESOLVER_RESPONSE";
437 case DNSTAP__MESSAGE__TYPE__CLIENT_QUERY:
438 return "CLIENT_QUERY";
439 case DNSTAP__MESSAGE__TYPE__CLIENT_RESPONSE:
440 return "CLIENT_RESPONSE";
441 case DNSTAP__MESSAGE__TYPE__FORWARDER_QUERY:
442 return "FORWARDER_QUERY";
443 case DNSTAP__MESSAGE__TYPE__FORWARDER_RESPONSE:
444 return "FORWARDER_RESPONSE";
445 case DNSTAP__MESSAGE__TYPE__STUB_QUERY:
446 return "STUB_QUERY";
447 case DNSTAP__MESSAGE__TYPE__STUB_RESPONSE:
448 return "STUB_RESPONSE";
449 default: break;
450 }
451 return "unknown_message_type";
452 }
453
454 /** convert type address to a string ip4 or ip6, malloced or NULL on fail */
455 static char* str_of_addr(ProtobufCBinaryData address)
456 {
457 char buf[64];
458 socklen_t len = sizeof(buf);
459 if(address.len == 4) {
460 if(inet_ntop(AF_INET, address.data, buf, len)!=0)
461 return strdup(buf);
462 } else if(address.len == 16) {
463 if(inet_ntop(AF_INET6, address.data, buf, len)!=0)
464 return strdup(buf);
465 }
466 return NULL;
467 }
468
469 /** convert message buffer (of dns bytes) to the first qname, type, class,
470 * malloced or NULL on fail */
471 static char* q_of_msg(ProtobufCBinaryData message)
472 {
473 char buf[300];
474 /* header, name, type, class minimum to get the query tuple */
475 if(message.len < 12 + 1 + 4 + 4) return NULL;
476 if(sldns_wire2str_rrquestion_buf(message.data+12, message.len-12,
477 buf, sizeof(buf)) != 0) {
478 /* remove trailing newline, tabs to spaces */
479 /* remove the newline: */
480 if(buf[0] != 0) buf[strlen(buf)-1]=0;
481 /* remove first tab (before type) */
482 if(strrchr(buf, '\t')) *strrchr(buf, '\t')=' ';
483 /* remove second tab (before class) */
484 if(strrchr(buf, '\t')) *strrchr(buf, '\t')=' ';
485 return strdup(buf);
486 }
487 return NULL;
488 }
489
490 /** convert possible string or hex data to string. malloced or NULL */
491 static char* possible_str(ProtobufCBinaryData str)
492 {
493 int is_str = 1;
494 size_t i;
495 for(i=0; i<str.len; i++) {
496 if(!isprint((unsigned char)str.data[i]))
497 is_str = 0;
498 }
499 if(is_str) {
500 char* res = malloc(str.len+1);
501 if(res) {
502 memmove(res, str.data, str.len);
503 res[str.len] = 0;
504 return res;
505 }
506 } else {
507 const char* hex = "0123456789ABCDEF";
508 char* res = malloc(str.len*2+1);
509 if(res) {
510 for(i=0; i<str.len; i++) {
511 res[i*2] = hex[(str.data[i]&0xf0)>>4];
512 res[i*2+1] = hex[str.data[i]&0x0f];
513 }
514 res[str.len*2] = 0;
515 return res;
516 }
517 }
518 return NULL;
519 }
520
521 /** convert timeval to string, malloced or NULL */
522 static char* tv_to_str(protobuf_c_boolean has_time_sec, uint64_t time_sec,
523 protobuf_c_boolean has_time_nsec, uint32_t time_nsec)
524 {
525 char buf[64], buf2[256];
526 struct timeval tv;
527 time_t time_t_sec;
528 memset(&tv, 0, sizeof(tv));
529 if(has_time_sec) tv.tv_sec = time_sec;
530 if(has_time_nsec) tv.tv_usec = time_nsec;
531
532 buf[0]=0;
533 time_t_sec = tv.tv_sec;
534 (void)ctime_r(&time_t_sec, buf);
535 snprintf(buf2, sizeof(buf2), "%u.%9.9u %s",
536 (unsigned)time_sec, (unsigned)time_nsec, buf);
537 return strdup(buf2);
538 }
539
540 /** log data frame contents */
541 static void log_data_frame(uint8_t* pkt, size_t len)
542 {
543 Dnstap__Dnstap* d = dnstap__dnstap__unpack(NULL, len, pkt);
544 const char* mtype = NULL;
545 char* maddr=NULL, *qinf=NULL;
546 if(!d) {
547 log_err("could not unpack");
548 return;
549 }
550 if(d->base.descriptor != &dnstap__dnstap__descriptor) {
551 log_err("wrong base descriptor");
552 dnstap__dnstap__free_unpacked(d, NULL);
553 return;
554 }
555 if(d->type != DNSTAP__DNSTAP__TYPE__MESSAGE) {
556 log_err("dnstap type not type_message");
557 dnstap__dnstap__free_unpacked(d, NULL);
558 return;
559 }
560 if(d->message) {
561 mtype = mtype_to_str(d->message->type);
562 if(d->message->has_query_address)
563 maddr = str_of_addr(d->message->query_address);
564 else if(d->message->has_response_address)
565 maddr = str_of_addr(d->message->response_address);
566 if(d->message->has_query_message)
567 qinf = q_of_msg(d->message->query_message);
568 else if(d->message->has_response_message)
569 qinf = q_of_msg(d->message->response_message);
570
571 } else {
572 mtype = "nomessage";
573 }
574
575 printf("%s%s%s%s%s\n", mtype, (maddr?" ":""), (maddr?maddr:""),
576 (qinf?" ":""), (qinf?qinf:""));
577 free(maddr);
578 free(qinf);
579
580 if(longformat) {
581 char* id=NULL, *vs=NULL;
582 if(d->has_identity) {
583 id=possible_str(d->identity);
584 }
585 if(d->has_version) {
586 vs=possible_str(d->version);
587 }
588 if(id || vs)
589 printf("identity: %s%s%s\n", (id?id:""),
590 (id&&vs?" ":""), (vs?vs:""));
591 free(id);
592 free(vs);
593
594 if(d->message && d->message->has_query_message &&
595 d->message->query_message.data) {
596 char* qmsg = sldns_wire2str_pkt(
597 d->message->query_message.data,
598 d->message->query_message.len);
599 if(qmsg) {
600 printf("query_message:\n%s", qmsg);
601 free(qmsg);
602 }
603 }
604 if(d->message && d->message->has_query_time_sec) {
605 char* qtv = tv_to_str(d->message->has_query_time_sec,
606 d->message->query_time_sec,
607 d->message->has_query_time_nsec,
608 d->message->query_time_nsec);
609 if(qtv) {
610 printf("query_time: %s\n", qtv);
611 free(qtv);
612 }
613 }
614 if(d->message && d->message->has_response_message &&
615 d->message->response_message.data) {
616 char* rmsg = sldns_wire2str_pkt(
617 d->message->response_message.data,
618 d->message->response_message.len);
619 if(rmsg) {
620 printf("response_message:\n%s", rmsg);
621 free(rmsg);
622 }
623 }
624 if(d->message && d->message->has_response_time_sec) {
625 char* rtv = tv_to_str(d->message->has_response_time_sec,
626 d->message->response_time_sec,
627 d->message->has_response_time_nsec,
628 d->message->response_time_nsec);
629 if(rtv) {
630 printf("response_time: %s\n", rtv);
631 free(rtv);
632 }
633 }
634 }
635 fflush(stdout);
636 dnstap__dnstap__free_unpacked(d, NULL);
637 }
638 #endif /* USE_DNSTAP */
639
640 /** receive bytes from fd, prints errors if bad,
641 * returns 0: closed/error, -1: continue, >0 number of bytes */
642 static ssize_t receive_bytes(struct tap_data* data, int fd, void* buf,
643 size_t len)
644 {
645 ssize_t ret = recv(fd, buf, len, 0);
646 if(ret == 0) {
647 /* closed */
648 if(verbosity) log_info("dnstap client stream closed from %s",
649 (data->id?data->id:""));
650 return 0;
651 } else if(ret == -1) {
652 /* error */
653 #ifndef USE_WINSOCK
654 if(errno == EINTR || errno == EAGAIN)
655 return -1;
656 log_err("could not recv: %s", strerror(errno));
657 #else /* USE_WINSOCK */
658 if(WSAGetLastError() == WSAEINPROGRESS)
659 return -1;
660 if(WSAGetLastError() == WSAEWOULDBLOCK) {
661 ub_winsock_tcp_wouldblock(data->ev, UB_EV_READ);
662 return -1;
663 }
664 log_err("could not recv: %s",
665 wsa_strerror(WSAGetLastError()));
666 #endif
667 if(verbosity) log_info("dnstap client stream closed from %s",
668 (data->id?data->id:""));
669 return 0;
670 }
671 return ret;
672 }
673
674 /* define routine for have_ssl only to avoid unused function warning */
675 #ifdef HAVE_SSL
676 /** set to wait briefly for a write event, for one event call */
677 static void tap_enable_brief_write(struct tap_data* data)
678 {
679 ub_event_del(data->ev);
680 ub_event_del_bits(data->ev, UB_EV_READ);
681 ub_event_add_bits(data->ev, UB_EV_WRITE);
682 if(ub_event_add(data->ev, NULL) != 0)
683 log_err("could not ub_event_add in tap_enable_brief_write");
684 data->ssl_brief_write = 1;
685 }
686 #endif /* HAVE_SSL */
687
688 /* define routine for have_ssl only to avoid unused function warning */
689 #ifdef HAVE_SSL
690 /** stop the brief wait for a write event. back to reading. */
691 static void tap_disable_brief_write(struct tap_data* data)
692 {
693 ub_event_del(data->ev);
694 ub_event_del_bits(data->ev, UB_EV_WRITE);
695 ub_event_add_bits(data->ev, UB_EV_READ);
696 if(ub_event_add(data->ev, NULL) != 0)
697 log_err("could not ub_event_add in tap_disable_brief_write");
698 data->ssl_brief_write = 0;
699 }
700 #endif /* HAVE_SSL */
701
702 #ifdef HAVE_SSL
703 /** receive bytes over ssl stream, prints errors if bad,
704 * returns 0: closed/error, -1: continue, >0 number of bytes */
705 static ssize_t ssl_read_bytes(struct tap_data* data, void* buf, size_t len)
706 {
707 int r;
708 ERR_clear_error();
709 r = SSL_read(data->ssl, buf, len);
710 if(r <= 0) {
711 int want = SSL_get_error(data->ssl, r);
712 if(want == SSL_ERROR_ZERO_RETURN) {
713 /* closed */
714 if(verbosity) log_info("dnstap client stream closed from %s",
715 (data->id?data->id:""));
716 return 0;
717 } else if(want == SSL_ERROR_WANT_READ) {
718 /* continue later */
719 return -1;
720 } else if(want == SSL_ERROR_WANT_WRITE) {
721 /* set to briefly write */
722 tap_enable_brief_write(data);
723 return -1;
724 } else if(want == SSL_ERROR_SYSCALL) {
725 #ifdef ECONNRESET
726 if(errno == ECONNRESET && verbosity < 2)
727 return 0; /* silence reset by peer */
728 #endif
729 if(errno != 0)
730 log_err("SSL_read syscall: %s",
731 strerror(errno));
732 if(verbosity) log_info("dnstap client stream closed from %s",
733 (data->id?data->id:""));
734 return 0;
735 }
736 log_crypto_err("could not SSL_read");
737 if(verbosity) log_info("dnstap client stream closed from %s",
738 (data->id?data->id:""));
739 return 0;
740 }
741 return r;
742 }
743 #endif /* HAVE_SSL */
744
745 /** receive bytes on the tap connection, prints errors if bad,
746 * returns 0: closed/error, -1: continue, >0 number of bytes */
747 static ssize_t tap_receive(struct tap_data* data, void* buf, size_t len)
748 {
749 #ifdef HAVE_SSL
750 if(data->ssl)
751 return ssl_read_bytes(data, buf, len);
752 #endif
753 return receive_bytes(data, data->fd, buf, len);
754 }
755
756 /** delete the tap structure */
757 void tap_data_free(struct tap_data* data)
758 {
759 ub_event_del(data->ev);
760 ub_event_free(data->ev);
761 #ifdef HAVE_SSL
762 SSL_free(data->ssl);
763 #endif
764 close(data->fd);
765 free(data->id);
766 free(data->frame);
767 free(data);
768 }
769
770 /** reply with ACCEPT control frame to bidirectional client,
771 * returns 0 on error */
772 static int reply_with_accept(struct tap_data* data)
773 {
774 #ifdef USE_DNSTAP
775 /* len includes the escape and framelength */
776 int r;
777 size_t len = 0;
778 void* acceptframe = fstrm_create_control_frame_accept(
779 DNSTAP_CONTENT_TYPE, &len);
780 if(!acceptframe) {
781 log_err("out of memory");
782 return 0;
783 }
784
785 fd_set_block(data->fd);
786 if(data->ssl) {
787 if((r=SSL_write(data->ssl, acceptframe, len)) <= 0) {
788 if(SSL_get_error(data->ssl, r) == SSL_ERROR_ZERO_RETURN)
789 log_err("SSL_write, peer closed connection");
790 else
791 log_err("could not SSL_write");
792 fd_set_nonblock(data->fd);
793 free(acceptframe);
794 return 0;
795 }
796 } else {
797 if(send(data->fd, acceptframe, len, 0) == -1) {
798 #ifndef USE_WINSOCK
799 log_err("send failed: %s", strerror(errno));
800 #else
801 log_err("send failed: %s",
802 wsa_strerror(WSAGetLastError()));
803 #endif
804 fd_set_nonblock(data->fd);
805 free(acceptframe);
806 return 0;
807 }
808 }
809 if(verbosity) log_info("sent control frame(accept) content-type:(%s)",
810 DNSTAP_CONTENT_TYPE);
811
812 fd_set_nonblock(data->fd);
813 free(acceptframe);
814 return 1;
815 #else
816 log_err("no dnstap compiled, no reply");
817 (void)data;
818 return 0;
819 #endif
820 }
821
822 /** reply with FINISH control frame to bidirectional client,
823 * returns 0 on error */
824 static int reply_with_finish(int fd)
825 {
826 #ifdef USE_DNSTAP
827 size_t len = 0;
828 void* finishframe = fstrm_create_control_frame_finish(&len);
829 if(!finishframe) {
830 log_err("out of memory");
831 return 0;
832 }
833
834 fd_set_block(fd);
835 if(send(fd, finishframe, len, 0) == -1) {
836 #ifndef USE_WINSOCK
837 log_err("send failed: %s", strerror(errno));
838 #else
839 log_err("send failed: %s", wsa_strerror(WSAGetLastError()));
840 #endif
841 fd_set_nonblock(fd);
842 free(finishframe);
843 return 0;
844 }
845 if(verbosity) log_info("sent control frame(finish)");
846
847 fd_set_nonblock(fd);
848 free(finishframe);
849 return 1;
850 #else
851 log_err("no dnstap compiled, no reply");
852 (void)fd;
853 return 0;
854 #endif
855 }
856
857 #ifdef HAVE_SSL
858 /** check SSL peer certificate, return 0 on fail */
859 static int tap_check_peer(struct tap_data* data)
860 {
861 if((SSL_get_verify_mode(data->ssl)&SSL_VERIFY_PEER)) {
862 /* verification */
863 if(SSL_get_verify_result(data->ssl) == X509_V_OK) {
864 X509* x = SSL_get_peer_certificate(data->ssl);
865 if(!x) {
866 if(verbosity) log_info("SSL connection %s"
867 " failed no certificate", data->id);
868 return 0;
869 }
870 if(verbosity)
871 log_cert(VERB_ALGO, "peer certificate", x);
872 #ifdef HAVE_SSL_GET0_PEERNAME
873 if(SSL_get0_peername(data->ssl)) {
874 if(verbosity) log_info("SSL connection %s "
875 "to %s authenticated", data->id,
876 SSL_get0_peername(data->ssl));
877 } else {
878 #endif
879 if(verbosity) log_info("SSL connection %s "
880 "authenticated", data->id);
881 #ifdef HAVE_SSL_GET0_PEERNAME
882 }
883 #endif
884 X509_free(x);
885 } else {
886 X509* x = SSL_get_peer_certificate(data->ssl);
887 if(x) {
888 if(verbosity)
889 log_cert(VERB_ALGO, "peer certificate", x);
890 X509_free(x);
891 }
892 if(verbosity) log_info("SSL connection %s failed: "
893 "failed to authenticate", data->id);
894 return 0;
895 }
896 } else {
897 /* unauthenticated, the verify peer flag was not set
898 * in ssl when the ssl object was created from ssl_ctx */
899 if(verbosity) log_info("SSL connection %s", data->id);
900 }
901 return 1;
902 }
903 #endif /* HAVE_SSL */
904
905 #ifdef HAVE_SSL
906 /** perform SSL handshake, return 0 to wait for events, 1 if done */
907 static int tap_handshake(struct tap_data* data)
908 {
909 int r;
910 if(data->ssl_brief_write) {
911 /* write condition has been satisfied, back to reading */
912 tap_disable_brief_write(data);
913 }
914 if(data->ssl_handshake_done)
915 return 1;
916
917 ERR_clear_error();
918 r = SSL_do_handshake(data->ssl);
919 if(r != 1) {
920 int want = SSL_get_error(data->ssl, r);
921 if(want == SSL_ERROR_WANT_READ) {
922 return 0;
923 } else if(want == SSL_ERROR_WANT_WRITE) {
924 tap_enable_brief_write(data);
925 return 0;
926 } else if(r == 0) {
927 /* closed */
928 tap_data_free(data);
929 return 0;
930 } else if(want == SSL_ERROR_SYSCALL) {
931 /* SYSCALL and errno==0 means closed uncleanly */
932 int silent = 0;
933 #ifdef EPIPE
934 if(errno == EPIPE && verbosity < 2)
935 silent = 1; /* silence 'broken pipe' */
936 #endif
937 #ifdef ECONNRESET
938 if(errno == ECONNRESET && verbosity < 2)
939 silent = 1; /* silence reset by peer */
940 #endif
941 if(errno == 0)
942 silent = 1;
943 if(!silent)
944 log_err("SSL_handshake syscall: %s",
945 strerror(errno));
946 tap_data_free(data);
947 return 0;
948 } else {
949 unsigned long err = ERR_get_error();
950 if(!squelch_err_ssl_handshake(err)) {
951 log_crypto_err_code("ssl handshake failed",
952 err);
953 verbose(VERB_OPS, "ssl handshake failed "
954 "from %s", data->id);
955 }
956 tap_data_free(data);
957 return 0;
958 }
959 }
960 /* check peer verification */
961 data->ssl_handshake_done = 1;
962 if(!tap_check_peer(data)) {
963 /* closed */
964 tap_data_free(data);
965 return 0;
966 }
967 return 1;
968 }
969 #endif /* HAVE_SSL */
970
971 /** callback for dnstap listener */
972 void dtio_tap_callback(int fd, short ATTR_UNUSED(bits), void* arg)
973 {
974 struct tap_data* data = (struct tap_data*)arg;
975 if(verbosity>=3) log_info("tap callback");
976 #ifdef HAVE_SSL
977 if(data->ssl && (!data->ssl_handshake_done ||
978 data->ssl_brief_write)) {
979 if(!tap_handshake(data))
980 return;
981 }
982 #endif
983 while(data->len_done < 4) {
984 uint32_t l = (uint32_t)data->len;
985 ssize_t ret = tap_receive(data,
986 ((uint8_t*)&l)+data->len_done, 4-data->len_done);
987 if(verbosity>=4) log_info("s recv %d", (int)ret);
988 if(ret == 0) {
989 /* closed or error */
990 tap_data_free(data);
991 return;
992 } else if(ret == -1) {
993 /* continue later */
994 return;
995 }
996 data->len_done += ret;
997 data->len = (size_t)l;
998 if(data->len_done < 4)
999 return; /* continue later */
1000 data->len = (size_t)(ntohl(l));
1001 if(verbosity>=3) log_info("length is %d", (int)data->len);
1002 if(data->len == 0) {
1003 /* it is a control frame */
1004 data->control_frame = 1;
1005 /* read controlframelen */
1006 data->len_done = 0;
1007 } else {
1008 /* allocate frame size */
1009 data->frame = calloc(1, data->len);
1010 if(!data->frame) {
1011 log_err("out of memory");
1012 tap_data_free(data);
1013 return;
1014 }
1015 }
1016 }
1017
1018 /* we want to read the full length now */
1019 if(data->data_done < data->len) {
1020 ssize_t r = tap_receive(data, data->frame + data->data_done,
1021 data->len - data->data_done);
1022 if(verbosity>=4) log_info("f recv %d", (int)r);
1023 if(r == 0) {
1024 /* closed or error */
1025 tap_data_free(data);
1026 return;
1027 } else if(r == -1) {
1028 /* continue later */
1029 return;
1030 }
1031 data->data_done += r;
1032 if(data->data_done < data->len)
1033 return; /* continue later */
1034 }
1035
1036 /* we are done with a frame */
1037 if(verbosity>=3) log_info("received %sframe len %d",
1038 (data->control_frame?"control ":""), (int)data->len);
1039 #ifdef USE_DNSTAP
1040 if(data->control_frame)
1041 log_control_frame(data->frame, data->len);
1042 else log_data_frame(data->frame, data->len);
1043 #endif
1044
1045 if(data->len >= 4 && sldns_read_uint32(data->frame) ==
1046 FSTRM_CONTROL_FRAME_READY) {
1047 data->is_bidirectional = 1;
1048 if(verbosity) log_info("bidirectional stream");
1049 if(!reply_with_accept(data)) {
1050 tap_data_free(data);
1051 }
1052 } else if(data->len >= 4 && sldns_read_uint32(data->frame) ==
1053 FSTRM_CONTROL_FRAME_STOP && data->is_bidirectional) {
1054 if(!reply_with_finish(fd)) {
1055 tap_data_free(data);
1056 return;
1057 }
1058 }
1059
1060 /* prepare for next frame */
1061 free(data->frame);
1062 data->frame = NULL;
1063 data->control_frame = 0;
1064 data->len = 0;
1065 data->len_done = 0;
1066 data->data_done = 0;
1067
1068 }
1069
1070 /** callback for main listening file descriptor */
1071 void dtio_mainfdcallback(int fd, short ATTR_UNUSED(bits), void* arg)
1072 {
1073 struct tap_socket* tap_sock = (struct tap_socket*)arg;
1074 struct main_tap_data* maindata = (struct main_tap_data*)
1075 tap_sock->data;
1076 struct tap_data* data;
1077 char* id = NULL;
1078 struct sockaddr_storage addr;
1079 socklen_t addrlen = (socklen_t)sizeof(addr);
1080 int s = accept(fd, (struct sockaddr*)&addr, &addrlen);
1081 if(s == -1) {
1082 #ifndef USE_WINSOCK
1083 /* EINTR is signal interrupt. others are closed connection. */
1084 if( errno == EINTR || errno == EAGAIN
1085 #ifdef EWOULDBLOCK
1086 || errno == EWOULDBLOCK
1087 #endif
1088 #ifdef ECONNABORTED
1089 || errno == ECONNABORTED
1090 #endif
1091 #ifdef EPROTO
1092 || errno == EPROTO
1093 #endif /* EPROTO */
1094 )
1095 return;
1096 log_err_addr("accept failed", strerror(errno), &addr, addrlen);
1097 #else /* USE_WINSOCK */
1098 if(WSAGetLastError() == WSAEINPROGRESS ||
1099 WSAGetLastError() == WSAECONNRESET)
1100 return;
1101 if(WSAGetLastError() == WSAEWOULDBLOCK) {
1102 ub_winsock_tcp_wouldblock(maindata->ev, UB_EV_READ);
1103 return;
1104 }
1105 log_err_addr("accept failed", wsa_strerror(WSAGetLastError()),
1106 &addr, addrlen);
1107 #endif
1108 return;
1109 }
1110 fd_set_nonblock(s);
1111 if(verbosity) {
1112 if(addr.ss_family == AF_LOCAL) {
1113 #ifdef HAVE_SYS_UN_H
1114 struct sockaddr_un* usock = calloc(1, sizeof(struct sockaddr_un) + 1);
1115 if(usock) {
1116 socklen_t ulen = sizeof(struct sockaddr_un);
1117 if(getsockname(fd, (struct sockaddr*)usock, &ulen) != -1) {
1118 log_info("accepted new dnstap client from %s", usock->sun_path);
1119 id = strdup(usock->sun_path);
1120 } else {
1121 log_info("accepted new dnstap client");
1122 }
1123 free(usock);
1124 } else {
1125 log_info("accepted new dnstap client");
1126 }
1127 #endif /* HAVE_SYS_UN_H */
1128 } else if(addr.ss_family == AF_INET ||
1129 addr.ss_family == AF_INET6) {
1130 char ip[256];
1131 addr_to_str(&addr, addrlen, ip, sizeof(ip));
1132 log_info("accepted new dnstap client from %s", ip);
1133 id = strdup(ip);
1134 } else {
1135 log_info("accepted new dnstap client");
1136 }
1137 }
1138
1139 data = calloc(1, sizeof(*data));
1140 if(!data) fatal_exit("out of memory");
1141 data->fd = s;
1142 data->id = id;
1143 if(tap_sock->sslctx) {
1144 data->ssl = incoming_ssl_fd(tap_sock->sslctx, data->fd);
1145 if(!data->ssl) fatal_exit("could not SSL_new");
1146 }
1147 data->ev = ub_event_new(maindata->base, s, UB_EV_READ | UB_EV_PERSIST,
1148 &dtio_tap_callback, data);
1149 if(!data->ev) fatal_exit("could not ub_event_new");
1150 if(ub_event_add(data->ev, NULL) != 0) fatal_exit("could not ub_event_add");
1151 }
1152
1153 /** setup local accept sockets */
1154 static void setup_local_list(struct main_tap_data* maindata,
1155 struct config_strlist_head* local_list)
1156 {
1157 struct config_strlist* item;
1158 for(item = local_list->first; item; item = item->next) {
1159 struct tap_socket* s;
1160 s = tap_socket_new_local(item->str, &dtio_mainfdcallback,
1161 maindata);
1162 if(!s) fatal_exit("out of memory");
1163 if(!tap_socket_list_insert(&maindata->acceptlist, s))
1164 fatal_exit("out of memory");
1165 }
1166 }
1167
1168 /** setup tcp accept sockets */
1169 static void setup_tcp_list(struct main_tap_data* maindata,
1170 struct config_strlist_head* tcp_list)
1171 {
1172 struct config_strlist* item;
1173 for(item = tcp_list->first; item; item = item->next) {
1174 struct tap_socket* s;
1175 s = tap_socket_new_tcpaccept(item->str, &dtio_mainfdcallback,
1176 maindata);
1177 if(!s) fatal_exit("out of memory");
1178 if(!tap_socket_list_insert(&maindata->acceptlist, s))
1179 fatal_exit("out of memory");
1180 }
1181 }
1182
1183 /** setup tls accept sockets */
1184 static void setup_tls_list(struct main_tap_data* maindata,
1185 struct config_strlist_head* tls_list, char* server_key,
1186 char* server_cert, char* verifypem)
1187 {
1188 struct config_strlist* item;
1189 for(item = tls_list->first; item; item = item->next) {
1190 struct tap_socket* s;
1191 s = tap_socket_new_tlsaccept(item->str, &dtio_mainfdcallback,
1192 maindata, server_key, server_cert, verifypem);
1193 if(!s) fatal_exit("out of memory");
1194 if(!tap_socket_list_insert(&maindata->acceptlist, s))
1195 fatal_exit("out of memory");
1196 }
1197 }
1198
1199 /** signal variable */
1200 static struct ub_event_base* sig_base = NULL;
1201 /** do we have to quit */
1202 int sig_quit = 0;
1203 /** signal handler for user quit */
1204 static RETSIGTYPE main_sigh(int sig)
1205 {
1206 verbose(VERB_ALGO, "exit on signal %d\n", sig);
1207 if(sig_base)
1208 ub_event_base_loopexit(sig_base);
1209 sig_quit = 1;
1210 }
1211
1212 /** setup and run the server to listen to DNSTAP messages */
1213 static void
1214 setup_and_run(struct config_strlist_head* local_list,
1215 struct config_strlist_head* tcp_list,
1216 struct config_strlist_head* tls_list, char* server_key,
1217 char* server_cert, char* verifypem)
1218 {
1219 time_t secs = 0;
1220 struct timeval now;
1221 struct main_tap_data* maindata;
1222 struct ub_event_base* base;
1223 const char *evnm="event", *evsys="", *evmethod="";
1224
1225 maindata = calloc(1, sizeof(*maindata));
1226 if(!maindata) fatal_exit("out of memory");
1227 memset(&now, 0, sizeof(now));
1228 base = ub_default_event_base(1, &secs, &now);
1229 if(!base) fatal_exit("could not create ub_event base");
1230 maindata->base = base;
1231 sig_base = base;
1232 if(sig_quit) {
1233 ub_event_base_free(base);
1234 free(maindata);
1235 return;
1236 }
1237 ub_get_event_sys(base, &evnm, &evsys, &evmethod);
1238 if(verbosity) log_info("%s %s uses %s method", evnm, evsys, evmethod);
1239
1240 setup_local_list(maindata, local_list);
1241 setup_tcp_list(maindata, tcp_list);
1242 setup_tls_list(maindata, tls_list, server_key, server_cert,
1243 verifypem);
1244 if(!tap_socket_list_addevs(maindata->acceptlist, base))
1245 fatal_exit("could not setup accept events");
1246 if(verbosity) log_info("start of service");
1247
1248 ub_event_base_dispatch(base);
1249
1250 if(verbosity) log_info("end of service");
1251 sig_base = NULL;
1252 tap_socket_list_delete(maindata->acceptlist);
1253 ub_event_base_free(base);
1254 free(maindata);
1255 }
1256
1257 /** getopt global, in case header files fail to declare it. */
1258 extern int optind;
1259 /** getopt global, in case header files fail to declare it. */
1260 extern char* optarg;
1261
1262 /** main program for streamtcp */
1263 int main(int argc, char** argv)
1264 {
1265 int c;
1266 int usessl = 0;
1267 struct config_strlist_head local_list;
1268 struct config_strlist_head tcp_list;
1269 struct config_strlist_head tls_list;
1270 char* server_key = NULL, *server_cert = NULL, *verifypem = NULL;
1271 #ifdef USE_WINSOCK
1272 WSADATA wsa_data;
1273 if(WSAStartup(MAKEWORD(2,2), &wsa_data) != 0) {
1274 printf("WSAStartup failed\n");
1275 return 1;
1276 }
1277 #endif
1278 if(signal(SIGINT, main_sigh) == SIG_ERR ||
1279 #ifdef SIGQUIT
1280 signal(SIGQUIT, main_sigh) == SIG_ERR ||
1281 #endif
1282 #ifdef SIGHUP
1283 signal(SIGHUP, main_sigh) == SIG_ERR ||
1284 #endif
1285 #ifdef SIGBREAK
1286 signal(SIGBREAK, main_sigh) == SIG_ERR ||
1287 #endif
1288 signal(SIGTERM, main_sigh) == SIG_ERR)
1289 fatal_exit("could not bind to signal");
1290 memset(&local_list, 0, sizeof(local_list));
1291 memset(&tcp_list, 0, sizeof(tcp_list));
1292 memset(&tls_list, 0, sizeof(tls_list));
1293
1294 /* lock debug start (if any) */
1295 log_ident_set("unbound-dnstap-socket");
1296 log_init(0, 0, 0);
1297 checklock_start();
1298
1299 #ifdef SIGPIPE
1300 if(signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
1301 perror("could not install signal handler for SIGPIPE");
1302 return 1;
1303 }
1304 #endif
1305
1306 /* command line options */
1307 while( (c=getopt(argc, argv, "hls:t:u:vx:y:z:")) != -1) {
1308 switch(c) {
1309 case 'u':
1310 if(!cfg_strlist_append(&local_list,
1311 strdup(optarg)))
1312 fatal_exit("out of memory");
1313 break;
1314 case 's':
1315 if(!cfg_strlist_append(&tcp_list,
1316 strdup(optarg)))
1317 fatal_exit("out of memory");
1318 break;
1319 case 't':
1320 if(!cfg_strlist_append(&tls_list,
1321 strdup(optarg)))
1322 fatal_exit("out of memory");
1323 usessl = 1;
1324 break;
1325 case 'x':
1326 server_key = optarg;
1327 usessl = 1;
1328 break;
1329 case 'y':
1330 server_cert = optarg;
1331 usessl = 1;
1332 break;
1333 case 'z':
1334 verifypem = optarg;
1335 usessl = 1;
1336 break;
1337 case 'l':
1338 longformat = 1;
1339 break;
1340 case 'v':
1341 verbosity++;
1342 break;
1343 case 'h':
1344 case '?':
1345 default:
1346 usage(argv);
1347 }
1348 }
1349 argc -= optind;
1350 argv += optind;
1351
1352 if(usessl) {
1353 #ifdef HAVE_SSL
1354 #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL)
1355 ERR_load_SSL_strings();
1356 #endif
1357 #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO)
1358 # ifndef S_SPLINT_S
1359 OpenSSL_add_all_algorithms();
1360 # endif
1361 #else
1362 OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS
1363 | OPENSSL_INIT_ADD_ALL_DIGESTS
1364 | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
1365 #endif
1366 #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL)
1367 (void)SSL_library_init();
1368 #else
1369 (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL);
1370 #endif
1371 #endif /* HAVE_SSL */
1372 }
1373 setup_and_run(&local_list, &tcp_list, &tls_list, server_key,
1374 server_cert, verifypem);
1375 config_delstrlist(local_list.first);
1376 config_delstrlist(tcp_list.first);
1377 config_delstrlist(tls_list.first);
1378
1379 checklock_stop();
1380 #ifdef USE_WINSOCK
1381 WSACleanup();
1382 #endif
1383 return 0;
1384 }
1385
1386 /***--- definitions to make fptr_wlist work. ---***/
1387 /* These are callbacks, similar to smallapp callbacks, except the debug
1388 * tool callbacks are not in it */
1389 struct tube;
1390 struct query_info;
1391 #include "util/data/packed_rrset.h"
1392
1393 void worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube),
1394 uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len),
1395 int ATTR_UNUSED(error), void* ATTR_UNUSED(arg))
1396 {
1397 log_assert(0);
1398 }
1399
1400 int worker_handle_request(struct comm_point* ATTR_UNUSED(c),
1401 void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
1402 struct comm_reply* ATTR_UNUSED(repinfo))
1403 {
1404 log_assert(0);
1405 return 0;
1406 }
1407
1408 int worker_handle_reply(struct comm_point* ATTR_UNUSED(c),
1409 void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
1410 struct comm_reply* ATTR_UNUSED(reply_info))
1411 {
1412 log_assert(0);
1413 return 0;
1414 }
1415
1416 int worker_handle_service_reply(struct comm_point* ATTR_UNUSED(c),
1417 void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
1418 struct comm_reply* ATTR_UNUSED(reply_info))
1419 {
1420 log_assert(0);
1421 return 0;
1422 }
1423
1424 int remote_accept_callback(struct comm_point* ATTR_UNUSED(c),
1425 void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
1426 struct comm_reply* ATTR_UNUSED(repinfo))
1427 {
1428 log_assert(0);
1429 return 0;
1430 }
1431
1432 int remote_control_callback(struct comm_point* ATTR_UNUSED(c),
1433 void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
1434 struct comm_reply* ATTR_UNUSED(repinfo))
1435 {
1436 log_assert(0);
1437 return 0;
1438 }
1439
1440 void worker_sighandler(int ATTR_UNUSED(sig), void* ATTR_UNUSED(arg))
1441 {
1442 log_assert(0);
1443 }
1444
1445 struct outbound_entry* worker_send_query(
1446 struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags),
1447 int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec),
1448 int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr),
1449 socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
1450 size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream),
1451 char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q))
1452 {
1453 log_assert(0);
1454 return 0;
1455 }
1456
1457 #ifdef UB_ON_WINDOWS
1458 void
1459 worker_win_stop_cb(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev), void*
1460 ATTR_UNUSED(arg)) {
1461 log_assert(0);
1462 }
1463
1464 void
1465 wsvc_cron_cb(void* ATTR_UNUSED(arg))
1466 {
1467 log_assert(0);
1468 }
1469 #endif /* UB_ON_WINDOWS */
1470
1471 void
1472 worker_alloc_cleanup(void* ATTR_UNUSED(arg))
1473 {
1474 log_assert(0);
1475 }
1476
1477 struct outbound_entry* libworker_send_query(
1478 struct query_info* ATTR_UNUSED(qinfo), uint16_t ATTR_UNUSED(flags),
1479 int ATTR_UNUSED(dnssec), int ATTR_UNUSED(want_dnssec),
1480 int ATTR_UNUSED(nocaps), struct sockaddr_storage* ATTR_UNUSED(addr),
1481 socklen_t ATTR_UNUSED(addrlen), uint8_t* ATTR_UNUSED(zone),
1482 size_t ATTR_UNUSED(zonelen), int ATTR_UNUSED(ssl_upstream),
1483 char* ATTR_UNUSED(tls_auth_name), struct module_qstate* ATTR_UNUSED(q))
1484 {
1485 log_assert(0);
1486 return 0;
1487 }
1488
1489 int libworker_handle_reply(struct comm_point* ATTR_UNUSED(c),
1490 void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
1491 struct comm_reply* ATTR_UNUSED(reply_info))
1492 {
1493 log_assert(0);
1494 return 0;
1495 }
1496
1497 int libworker_handle_service_reply(struct comm_point* ATTR_UNUSED(c),
1498 void* ATTR_UNUSED(arg), int ATTR_UNUSED(error),
1499 struct comm_reply* ATTR_UNUSED(reply_info))
1500 {
1501 log_assert(0);
1502 return 0;
1503 }
1504
1505 void libworker_handle_control_cmd(struct tube* ATTR_UNUSED(tube),
1506 uint8_t* ATTR_UNUSED(buffer), size_t ATTR_UNUSED(len),
1507 int ATTR_UNUSED(error), void* ATTR_UNUSED(arg))
1508 {
1509 log_assert(0);
1510 }
1511
1512 void libworker_fg_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode),
1513 struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s),
1514 char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited))
1515 {
1516 log_assert(0);
1517 }
1518
1519 void libworker_bg_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode),
1520 struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s),
1521 char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited))
1522 {
1523 log_assert(0);
1524 }
1525
1526 void libworker_event_done_cb(void* ATTR_UNUSED(arg), int ATTR_UNUSED(rcode),
1527 struct sldns_buffer* ATTR_UNUSED(buf), enum sec_status ATTR_UNUSED(s),
1528 char* ATTR_UNUSED(why_bogus), int ATTR_UNUSED(was_ratelimited))
1529 {
1530 log_assert(0);
1531 }
1532
1533 int context_query_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b))
1534 {
1535 log_assert(0);
1536 return 0;
1537 }
1538
1539 void worker_stat_timer_cb(void* ATTR_UNUSED(arg))
1540 {
1541 log_assert(0);
1542 }
1543
1544 void worker_probe_timer_cb(void* ATTR_UNUSED(arg))
1545 {
1546 log_assert(0);
1547 }
1548
1549 void worker_start_accept(void* ATTR_UNUSED(arg))
1550 {
1551 log_assert(0);
1552 }
1553
1554 void worker_stop_accept(void* ATTR_UNUSED(arg))
1555 {
1556 log_assert(0);
1557 }
1558
1559 /** keep track of lock id in lock-verify application */
1560 struct order_id {
1561 /** the thread id that created it */
1562 int thr;
1563 /** the instance number of creation */
1564 int instance;
1565 };
1566
1567 int order_lock_cmp(const void* e1, const void* e2)
1568 {
1569 const struct order_id* o1 = e1;
1570 const struct order_id* o2 = e2;
1571 if(o1->thr < o2->thr) return -1;
1572 if(o1->thr > o2->thr) return 1;
1573 if(o1->instance < o2->instance) return -1;
1574 if(o1->instance > o2->instance) return 1;
1575 return 0;
1576 }
1577
1578 int
1579 codeline_cmp(const void* a, const void* b)
1580 {
1581 return strcmp(a, b);
1582 }
1583
1584 int replay_var_compare(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b))
1585 {
1586 log_assert(0);
1587 return 0;
1588 }
1589
1590 void remote_get_opt_ssl(char* ATTR_UNUSED(str), void* ATTR_UNUSED(arg))
1591 {
1592 log_assert(0);
1593 }
0 20 July 2020: Wouter
1 - Fix streamtcp to print packet data to stdout. This makes the
2 stdout and stderr not mix together lines, when parsing its output.
3 - Fix contrib/fastrpz.patch to apply cleanly. It fixes for changes
4 due to added libdynmod, but it does not compile, it conflicts with
5 new rpz code.
6 - branch now named 1.11.0 and 1.11.0rc1 tag.
7
8 17 July 2020: Wouter
9 - Fix libnettle compile for session ticket key callback function
10 changes.
11 - Fix lock dependency cycle in rpz zone config setup.
12
13 17 July 2020: Ralph
14 - Merge PR #234 - Ensure proper alignment of cmsg buffers by Jérémie
15 Courrèges-Anglas.
16 - Fix PR #234 log_assert sizeof to use union buffer.
17
18 16 July 2020: Wouter
19 - Fix check conf test for referencing installation paths.
20 - Fix unused variable warning for clang analyzer.
21
22 16 July 2020: George
23 - Introduce 'include-toplevel:' configuration option.
24
25 16 July 2020: Ralph
26 - Add bidirectional frame streams support.
27
28 8 July 2020: Wouter
29 - Fix add missing DSA header, for compilation without deprecated
30 OpenSSL APIs.
31 - Fix to use SSL_CTX_set_tlsext_ticket_key_evp_cb in OpenSSL
32 3.0.0-alpha4.
33 - Longer keys for the test set, this avoids weak crypto errors.
34
35 7 July 2020: Wouter
36 - Fix #259: Fix unbound-checkconf does not check view existence.
37 unbound-checkconf checks access-control-view, access-control-tags,
38 access-control-tag-actions and access-control-tag-datas.
39 - Fix offset of error printout for access-control-tag-datas.
40 - Review fixes for checkconf #259 change.
41
42 6 July 2020: Wouter
43 - run_vm cleanup better and removes trailing slash on single argument.
44
45 29 June 2020: Wouter
46 - Move reply list clean for serve expired mesh callback to after
47 the reply is sent, so that script callbacks have reply_info.
48 - Also move reply list clean for mesh callbacks to the scrip callback
49 can see the reply_info.
50 - Fix for mesh accounting if the reply list already empty to begin
51 with.
52 - Fix for mesh accounting when rpz decides to drop a reply with a
53 tcp stream waiting for it.
54 - Review fix for number of detached states due to use of variable
55 after end of loop.
56 - Fix tcp req info drop due to size call into mesh accounting
57 removal of mesh state during mesh send reply.
58
59 24 June 2020: Wouter
60 - iana portlist updated.
61 - doxygen file comments for dynlibmodule.
62
63 17 June 2020: Wouter
64 - Fix default explanation in man page for qname-minimisation-strict.
65 - Fix display of event loop method with libev.
66
67 8 June 2020: Wouter
68 - Mention tls name possible when tls is enabled for stub-addr in the
69 man page.
70
71 27 May 2020: George
72 - Merge PR #241 by Robert Edmonds: contrib/libunbound.pc.in: Do not use
73 "Requires:".
74
75 25 May 2020: George
76 - Update contrib/aaaa-filter-iterator.patch for the recent
77 generate_sub_request() change and to apply cleanly.
78
79 21 May 2020: George
80 - Fix for integer overflow when printing RDF_TYPE_TIME.
81
82 19 May 2020: Wouter
83 - CVE-2020-12662 Unbound can be tricked into amplifying an incoming
84 query into a large number of queries directed to a target.
85 - CVE-2020-12663 Malformed answers from upstream name servers can be
86 used to make Unbound unresponsive.
87 - Release 1.10.1 is 1.10.0 with fixes, code repository continues,
88 including those fixes, towards the next release. Configure has
89 version 1.10.2 version number in it.
90 - For PR #93: windows compile warnings removal
91 - windows compile warnings removal for ip dscp option code.
92 - For PR #93: unit test for dynlib module.
93
94 18 May 2020: Wouter
95 - For PR #93: dynlibmod can handle reloads and deinit and inits again,
96 with dlclose and dlopen of the library again. Also for multiple
97 modules. Fix memory leak by not closing dlopened content. Fix
98 to allow one dynlibmod instance by unbound-checkconf.
99 - For PR #93: checkconf allows multiple dynlib in module-config, for
100 a couple cases.
101 - For PR #93: checkconf allows python dynlib in module-config, for
102 a couple cases.
103 - For PR #93: man page spelling reference fix.
104 - For PR #93: fix link of other executables for dynlibmod dependency.
105
106 15 May 2020: Wouter
107 - Merge PR #93: Add dynamic library support.
108 - Fixed conflicts for PR #93 and make configure, yacc, lex.
109 - For PR #93: Fix warnings for dynlibmodule.
110
111 15 May 2020: Ralph
112 - Cache ECS answers with longest scope of CNAME chain.
113
114 22 April 2020: George
115 - Explicitly use 'rrset-roundrobin: no' for test cases.
116
117 21 April 2020: Wouter
118 - Merge #225 from akhait: KSK-2010 has been revoked. It removes the
119 KSK-2010 from the default list in unbound-anchor, now that the
120 revocation period is over. KSK-2017 is the only trust anchor in
121 the shipped default now.
122
123 21 April 2020: George
124 - Change default value for 'rrset-roundrobin' to yes.
125 - Fix tests for new rrset-roundrobin default.
126
127 20 April 2020: Wouter
128 - Fix #222: --enable-rpath, fails to rpath python lib.
129 - Fix for count of reply states in the mesh.
130 - Remove unneeded was_mesh_reply check.
131
132 17 April 2020: George
133 - Add SNI support on more TLS connections (fixes #193).
134 - Add SNI support to unbound-anchor.
135
136 16 April 2020: George
137 - Add doxygen documentation for DSCP.
138
139 16 April 2020: Wouter
140 - Fix help return code in unbound-control-setup script.
141 - Fix for posix shell syntax for trap in nsd-control-setup.
142 - Fix for posix shell syntax for trap in run_msg.sh test script.
143
144 15 April 2020: George
145 - Fix #220: auth-zone section in config may lead to segfault.
146
147 7 April 2020: Wouter
148 - Merge PR #214 from gearnode: unbound-control-setup recreate
149 certificates. With the -r option the certificates are created
150 again, without it, only the files that do not exist are created.
151
152 6 April 2020: Ralph
153 - Keep track of number of timeouts. Use this counter to determine if
154 capsforid fallback should be started.
155
156 6 April 2020: George
157 - More documentation for redis-expire-records option.
158
159 1 April 2020: George
160 - Merge PR #206: Redis TTL, by Talkabout.
161
162 30 March 2020: Wouter
163 - Merge PR #207: Clarify if-automatic listens on 0.0.0.0 and ::
164 - Merge PR #208: Fix uncached CLIENT_RESPONSE'es on stateful
165 transports.
166
167 27 March 2020: Wouter
168 - Merge PR #203 from noloader: Update README-Travis.md with current
169 procedures.
170
171 27 March 2020: Ralph
172 - Make unbound-control error returned on missing domain name more user
173 friendly.
174
175 26 March 2020: Ralph
176 - Fix RPZ concurrency issue when using auth_zone_reload.
177
178 25 March 2020: George
179 - Merge PR #201 from noloader: Fix OpenSSL cross-compaile warnings.
180 - Fix on #201.
181
182 24 March 2020: Wouter
183 - Merge PR #200 from yarikk: add ip-dscp option to specify the DSCP
184 tag for outgoing packets.
185 - Fixes on #200.
186 - Travis fix for ios by omitting tools from install.
187
188 23 March 2020: Wouter
189 - Fix compile on Solaris for unbound-checkconf.
190
191 20 March 2020: George
192 - Merge PR #198 from fobser: Declare lz_enter_rr_into_zone() static, it's
193 only used in this file.
194
195 20 March 2020: Wouter
196 - Merge PR #197 from fobser: Make log_ident_revert_to_default() a
197 proper prototype.
198
199 19 March 2020: Ralph
200 - Merge PR#191: Update iOS testing on Travis, by Jeffrey Walton.
201 - Fix #158: open tls-session-ticket-keys as binary, for Windows. By
202 Daisuke HIGASHI.
203 - Merge PR#134, Allow the kernel to provide random source ports. By
204 Florian Obser.
205 - Log warning when using outgoing-port-permit and outgoing-port-avoid
206 while explicit port randomisation is disabled.
207 - Merge PR#194: Add libevent testing to Travis, by Jeffrey Walton.
208 - Fix .travis.yml error, missing 'env' option.
209
210 16 March 2020: Wouter
211 - Fix #192: In the unbound-checkconf tool, the module config of
212 dns64 subnetcache respip validator iterator is whitelisted, it was
213 reported it seems to work.
214
215 12 March 2020: Wouter
216 - Fix compile of test tools without protobuf.
217
218 11 March 2020: Ralph
219 - Add check to make sure RPZ records are subdomains of configured
220 zone origin.
221
222 11 March 2020: George
223 - Fix #189: mini_event.h:142:17: error: field 'ev_timeout' has incomplete
224 type, by noloader.
225 - Changelog entry for (Fix #189, Merge PR #190).
226
227 11 March 2020: Wouter
228 - Fix #188: unbound-control.c:882:6: error: 'execlp' is
229 unavailable: not available on tvOS.
230
231 6 March 2020: George
232 - Merge PR #186, fix #183: Fix unrecognized 'echo -n' option on OS X, by
233 noloader
234
235 5 March 2020: Wouter
236 - Fix PR #182 from noloader: Add iOS testing to Travis.
237
238 4 March 2020: Ralph
239 - Update README-Travis.md (from PR #179), by Jeffrey Walton.
240
241 4 March 2020: George
242 - Merge PR #181 from noloader: Fix OpenSSL -pie warning on Android.
243
244 4 March 2020: Wouter
245 - Merge PR #180 from noloader: Avoid calling exit in Travis script.
246
247 3 March 2020: George
248 - Upgrade config.guess(2020-01-01) and config.sub(2020-01-01).
249
250 2 March 2020: Ralph
251 - Fix #175, Merge PR #176: fix link error when OpenSSL is configured
252 with no-engine, thanks noloader.
253
254 2 March 2020: George
255 - Fix compiler warning in dns64/dns64.c
256 - Merge PR #174: Add Android to Travis testing, by noloader.
257 - Move android build scripts to contrib/ and allow android tests to fail.
258
259 2 March 2020: Wouter
260 - Fix #177: dnstap does not build on macOS.
261
262 28 February 2020: Ralph
263 - Merge PR #172: Add IBM s390x arch for testing, by noloader.
264
265 28 February 2020: Wouter
266 - Merge PR #173: updated makedist.sh for config.guess and
267 config.sub and sha256 digest for gpg, by noloader.
268 - Merge PR #164: Framestreams, this branch implements dnstap
269 unidirectional connectivity in unbound. This has a number of
270 new features.
271
272 The dependency on libfstrm is removed. The fstrm protocol code
273 resides in dnstap/dnstap_fstrm.h and dnstap/dnstap_fstrm.c. This
274 contains a brief definition of what unbound needs.
275
276 The make unbound-dnstap-socket builds a debug tool,
277 unbound-dnstap-socket. It can listen, accept multiple DNSTAP
278 streams and print information. Commandline options control it.
279
280 Unbound can reconnect if the unix domain socket file socket is
281 closed. This uses exponential backoff after which it uses a
282 one second timer to throttle cpu down. There is also support
283 to use TCP and TLS for connecting to the log server. There
284 are new config options to turn them on, in the dnstap section
285 in the man page and example config file. dnstap-ip with IP
286 address of server for TCP or TLS use. dnstap-tls to turn
287 on TLS. And dnstap-tls-server-name, dnstap-tls-cert-bundle,
288 dnstap-tls-client-key-file and dnstap-tls-client-cert-file
289 to configure the certificates for server authentication and
290 client authentication, or leave at "" to not use that.
291
292 27 February 2020: George
293 - Merge PR #171: Add additional compilers and platforms to Travis
294 testing, by noloader.
295
296 27 February 2020: Wouter
297 - Fix #169: Fix warning for daemon/remote.c output may be truncated
298 from snprintf.
299 - Fix #170: Fix gcc undefined sanitizer signed integer overflow
300 warning in signature expiry RFC1982 serial number arithmetic.
301 - Fix more undefined sanitizer issues, in respip copy_rrset null
302 dname, and in the client_info_compare routine for null memcmp.
303
304 26 February 2020: Wouter
305 - iana portlist updated.
306
307 25 February 2020: Wouter
308 - Fix #165: Add prefer-ip4: yesno config option to prefer ipv4 for
309 using ipv4 filters, because the hosts ip6 netblock /64 is not owned
310 by one operator, and thus reputation is shared.
311
312 24 February 2020: George
313 - Merge PR #166: Fix typo in unbound.service.in, by glitsj16.
314
0315 20 February 2020: Wouter
1316 - Updated contrib/unbound_smf23.tar.gz with Solaris SMF service for
2317 Unbound from Yuri Voinov.
318 - master branch has 1.10.1 version.
319
320 18 February 2020: Wouter
321 - protect X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS with ifdef for
322 different openssl versions.
323
324 17 February 2020: Wouter
325 - changelog point where the tag for 1.10.0rc2 release is. And with
326 the unbound_smf23 commit added to it, that is the 1.10.0 release.
3327
4328 17 February 2020: Ralph
5329 - Add respip to supported module-config options in unbound-checkconf.
0 README for Unbound 1.10.1
0 README for Unbound 1.11.0
11 Copyright 2007 NLnet Labs
22 http://unbound.net
33
00 #
11 # Example configuration file.
22 #
3 # See unbound.conf(5) man page, version 1.10.1.
3 # See unbound.conf(5) man page, version 1.11.0.
44 #
55 # this is a comment.
66
7 #Use this to include other text into the file.
7 # Use this anywhere in the file to include other text into this file.
88 #include: "otherfile.conf"
9
10 # Use this anywhere in the file to include other text, that explicitly starts a
11 # clause, into this file. Text after this directive needs to start a clause.
12 #include-toplevel: "otherfile.conf"
913
1014 # The server clause sets the main parameters.
1115 server:
6973 # Set this to yes to prefer ipv6 upstream servers over ipv4.
7074 # prefer-ip6: no
7175
76 # Prefer ipv4 upstream servers, even if ipv6 is available.
77 # prefer-ip4: no
78
7279 # number of ports to allocate per thread, determines the size of the
7380 # port range that can be open simultaneously. About double the
7481 # num-queries-per-thread, or, use as many as the OS will allow you.
114121 # and you can bind to nonexisting IPs and interfaces that are down.
115122 # Linux only. On Linux you also have ip-transparent that is similar.
116123 # ip-freebind: no
124
125 # the value of the Differentiated Services Codepoint (DSCP)
126 # in the differentiated services field (DS) of the outgoing
127 # IP packets
128 # ip-dscp: 0
117129
118130 # EDNS reassembly buffer to advertise to UDP peers (the actual buffer
119131 # is set with msg-buffer-size). 1472 can solve fragmentation (timeouts)
464476 # deny-any: no
465477
466478 # if yes, Unbound rotates RRSet order in response.
467 # rrset-roundrobin: no
479 # rrset-roundrobin: yes
468480
469481 # if yes, Unbound doesn't insert authority/additional sections
470482 # into response messages when those sections are not required.
737749 # cipher setting for TLSv1.3
738750 # tls-ciphersuites: "TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256"
739751
752 # Use the SNI extension for TLS connections. Default is yes.
753 # Changing the value requires a reload.
754 # tls-use-sni: yes
755
740756 # Add the secret file for TLS Session Ticket.
741757 # Secret file must be 80 bytes of random data.
742758 # First key use to encrypt and decrypt TLS session tickets.
845861 python:
846862 # Script file to load
847863 # python-script: "@UNBOUND_SHARE_DIR@/ubmodule-tst.py"
864
865 # Dynamic library config section. To enable:
866 # o use --with-dynlibmodule to configure before compiling.
867 # o list dynlib in the module-config string (above) to enable.
868 # It can be placed anywhere, the dynlib module is only a very thin wrapper
869 # to load modules dynamically.
870 # o and give a dynlib-file to run. If more than one dynlib entry is listed in
871 # the module-config then you need one dynlib-file per instance.
872 dynlib:
873 # Script file to load
874 # dynlib-file: "@UNBOUND_SHARE_DIR@/dynlib.so"
848875
849876 # Remote control config section.
850877 remote-control:
10041031 # redis-server-port: 6379
10051032 # # timeout (in ms) for communication with the redis server
10061033 # redis-timeout: 100
1034 # # set timeout on redis records based on DNS response TTL
1035 # redis-expire-records: no
10071036
10081037 # IPSet
10091038 # Add specify domain into set via ipset.
1010 # Note: To enable ipset needs run unbound as root user.
1039 # Note: To enable ipset unbound needs to run as root user.
10111040 # ipset:
10121041 # # set name for ip v4 addresses
10131042 # name-v4: "list-v4"
10141043 # # set name for ip v6 addresses
10151044 # name-v6: "list-v6"
10161045 #
1046
1047 # Dnstap logging support, if compiled in. To enable, set the dnstap-enable
1048 # to yes and also some of dnstap-log-..-messages to yes. And select an
1049 # upstream log destination, by socket path, TCP or TLS destination.
1050 # dnstap:
1051 # dnstap-enable: no
1052 # # if set to yes frame streams will be used in bidirectional mode
1053 # dnstap-bidirectional: yes
1054 # dnstap-socket-path: "@DNSTAP_SOCKET_PATH@"
1055 # # if "" use the unix socket in dnstap-socket-path, otherwise,
1056 # # set it to "IPaddress[@port]" of the destination.
1057 # dnstap-ip: ""
1058 # # if set to yes if you want to use TLS to dnstap-ip, no for TCP.
1059 # dnstap-tls: yes
1060 # # name for authenticating the upstream server. or "" disabled.
1061 # dnstap-tls-server-name: ""
1062 # # if "", it uses the cert bundle from the main unbound config.
1063 # dnstap-tls-cert-bundle: ""
1064 # # key file for client authentication, or "" disabled.
1065 # dnstap-tls-client-key-file: ""
1066 # # cert file for client authentication, or "" disabled.
1067 # dnstap-tls-client-cert-file: ""
1068 # dnstap-send-identity: no
1069 # dnstap-send-version: no
1070 # # if "" it uses the hostname.
1071 # dnstap-identity: ""
1072 # # if "" it uses the package version.
1073 # dnstap-version: ""
1074 # dnstap-log-resolver-query-messages: no
1075 # dnstap-log-resolver-response-messages: no
1076 # dnstap-log-client-query-messages: no
1077 # dnstap-log-client-response-messages: no
1078 # dnstap-log-forwarder-query-messages: no
1079 # dnstap-log-forwarder-response-messages: no
10171080
10181081 # Response Policy Zones
10191082 # RPZ policies. Applied in order of configuration. QNAME and Response IP
0 .TH "libunbound" "3" "May 19, 2020" "NLnet Labs" "unbound 1.10.1"
0 .TH "libunbound" "3" "Jul 27, 2020" "NLnet Labs" "unbound 1.11.0"
11 .\"
22 .\" libunbound.3 -- unbound library functions manual
33 .\"
4343 .B ub_ctx_zone_remove,
4444 .B ub_ctx_data_add,
4545 .B ub_ctx_data_remove
46 \- Unbound DNS validating resolver 1.10.1 functions.
46 \- Unbound DNS validating resolver 1.11.0 functions.
4747 .SH "SYNOPSIS"
4848 .B #include <unbound.h>
4949 .LP
0 .TH "unbound-anchor" "8" "May 19, 2020" "NLnet Labs" "unbound 1.10.1"
0 .TH "unbound-anchor" "8" "Jul 27, 2020" "NLnet Labs" "unbound 1.11.0"
11 .\"
22 .\" unbound-anchor.8 -- unbound anchor maintenance utility manual
33 .\"
6767 The server name, it connects to https://name. Specify without https:// prefix.
6868 The default is "data.iana.org". It connects to the port specified with \-P.
6969 You can pass an IPv4 address or IPv6 address (no brackets) if you want.
70 .TP
71 .B \-S
72 Do not use SNI for the HTTPS connection. Default is to use SNI.
7073 .TP
7174 .B \-b \fIaddress
7275 The source address to bind to for domain resolution and contacting the server
0 .TH "unbound-checkconf" "8" "May 19, 2020" "NLnet Labs" "unbound 1.10.1"
0 .TH "unbound-checkconf" "8" "Jul 27, 2020" "NLnet Labs" "unbound 1.11.0"
11 .\"
22 .\" unbound-checkconf.8 -- unbound configuration checker manual
33 .\"
0 .TH "unbound-control" "8" "May 19, 2020" "NLnet Labs" "unbound 1.10.1"
0 .TH "unbound-control" "8" "Jul 27, 2020" "NLnet Labs" "unbound 1.11.0"
11 .\"
22 .\" unbound-control.8 -- unbound remote control manual
33 .\"
0 .TH "unbound\-host" "1" "May 19, 2020" "NLnet Labs" "unbound 1.10.1"
0 .TH "unbound\-host" "1" "Jul 27, 2020" "NLnet Labs" "unbound 1.11.0"
11 .\"
22 .\" unbound-host.1 -- unbound DNS lookup utility
33 .\"
0 .TH "unbound" "8" "May 19, 2020" "NLnet Labs" "unbound 1.10.1"
0 .TH "unbound" "8" "Jul 27, 2020" "NLnet Labs" "unbound 1.11.0"
11 .\"
22 .\" unbound.8 -- unbound manual
33 .\"
88 .\"
99 .SH "NAME"
1010 .B unbound
11 \- Unbound DNS validating resolver 1.10.1.
11 \- Unbound DNS validating resolver 1.11.0.
1212 .SH "SYNOPSIS"
1313 .B unbound
1414 .RB [ \-h ]
0 .TH "unbound.conf" "5" "May 19, 2020" "NLnet Labs" "unbound 1.10.1"
0 .TH "unbound.conf" "5" "Jul 27, 2020" "NLnet Labs" "unbound 1.11.0"
11 .\"
22 .\" unbound.conf.5 -- unbound.conf manual
33 .\"
7676 if the directory where the daemon is started equals its chroot/working
7777 directory or is specified before the include statement with directory: dir.
7878 Wildcards can be used to include multiple files, see \fIglob\fR(7).
79 .P
80 For a more structural include option, the
81 .B include\-toplevel:
82 directive can be used. This closes whatever clause is currently active (if any)
83 and forces the use of clauses in the included files and right after this
84 directive.
7985 .SS "Server Options"
8086 These options are part of the
8187 .B server:
125131 Same as interface: (for ease of compatibility with nsd.conf).
126132 .TP
127133 .B interface\-automatic: \fI<yes or no>
128 Detect source interface on UDP queries and copy them to replies. This
129 feature is experimental, and needs support in your OS for particular socket
130 options. Default value is no.
134 Listen on all addresses on all (current and future) interfaces, detect the
135 source interface on UDP queries and copy them to replies. This is a lot like
136 ip\-transparent, but this option services all interfaces whilst with
137 ip\-transparent you can select which (future) interfaces unbound provides
138 service on. This feature is experimental, and needs support in your OS for
139 particular socket options. Default value is no.
131140 .TP
132141 .B outgoing\-interface: \fI<ip address or ip6 netblock>
133142 Interface to use to connect to the network. This interface is used to send
322331 interface or IP address is down. Exists only on Linux, where the similar
323332 ip\-transparent option is also available.
324333 .TP
334 .B ip-dscp: \fI<number>
335 The value of the Differentiated Services Codepoint (DSCP) in the
336 differentiated services field (DS) of the outgoing IP packet headers.
337 The field replaces the outdated IPv4 Type-Of-Service field and the
338 IPV6 traffic class field.
339 .TP
325340 .B rrset\-cache\-size: \fI<number>
326341 Number of bytes size of the RRset cache. Default is 4 megabytes.
327342 A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes
379394 IPv6 to the internet nameservers. With this option you can disable the
380395 ipv6 transport for sending DNS traffic, it does not impact the contents of
381396 the DNS traffic, which may have ip4 and ip6 addresses in it.
397 .TP
398 .B prefer\-ip4: \fI<yes or no>
399 If enabled, prefer IPv4 transport for sending DNS queries to internet
400 nameservers. Default is no. Useful if the IPv6 netblock the server has,
401 the entire /64 of that is not owned by one operator and the reputation of
402 the netblock /64 is an issue, using IPv4 then uses the IPv4 filters that
403 the upstream servers have.
382404 .TP
383405 .B prefer\-ip6: \fI<yes or no>
384406 If enabled, prefer IPv6 transport for sending DNS queries to internet
528550 .B tls\-ciphersuites: \fI<string with ciphersuites list>
529551 Set the list of ciphersuites to allow when serving TLS. This is for newer
530552 TLS 1.3 connections. Use "" for defaults, and that is the default.
553 .TP
554 .B tls\-use\-sni: \fI<yes or no>
555 Enable or disable sending the SNI extension on TLS connections.
556 Default is yes.
557 Changing the value requires a reload.
531558 .TP
532559 .B use\-systemd: \fI<yes or no>
533560 Enable or disable systemd socket activation.
842869 QNAME minimisation in strict mode. Do not fall-back to sending full QNAME to
843870 potentially broken nameservers. A lot of domains will not be resolvable when
844871 this option in enabled. Only use if you know what you are doing.
845 This option only has effect when qname-minimisation is enabled. Default is off.
872 This option only has effect when qname-minimisation is enabled. Default is no.
846873 .TP
847874 .B aggressive\-nsec: \fI<yes or no>
848875 Aggressive NSEC uses the DNSSEC NSEC chain to synthesize NXDOMAIN
910937 .TP
911938 .B rrset\-roundrobin: \fI<yes or no>
912939 If yes, Unbound rotates RRSet order in response (the random number is taken
913 from the query ID, for speed and thread safety). Default is no.
940 from the query ID, for speed and thread safety). Default is yes.
914941 .TP
915942 .B minimal-responses: \fI<yes or no>
916943 If yes, Unbound doesn't insert authority/additional sections into response
941968 Most modules that need to be listed here have to be listed at the beginning
942969 of the line. The cachedb module has to be listed just before the iterator.
943970 The python module can be listed in different places, it then processes the
944 output of the module it is just before.
971 output of the module it is just before. The dynlib module can be listed pretty
972 much anywhere, it is only a very thin wrapper that allows dynamic libraries to
973 run in its place.
945974 .TP
946975 .B trust\-anchor\-file: \fI<filename>
947976 File with trusted keys for validation. Both DS and DNSKEY entries can appear
15901619 .B stub\-addr: \fI<IP address>
15911620 IP address of stub zone nameserver. Can be IP 4 or IP 6.
15921621 To use a nondefault port for DNS communication append '@' with the port number.
1622 If tls is enabled, then you can append a '#' and a name, then it'll check
1623 the tls authentication certificates with that name. If you combine
1624 the '@' and '#', the '@' comes first.
15931625 .TP
15941626 .B stub\-prime: \fI<yes or no>
15951627 This option is by default no. If enabled it performs NS set priming,
18081840 .B python\-script: \fI<python file>\fR
18091841 The script file to load. Repeat this option for every python module instance
18101842 added to the \fBmodule\-config:\fR option.
1843 .SS "Dynamic Library Module Options"
1844 .LP
1845 The
1846 .B dynlib:
1847 clause gives the settings for the \fIdynlib\fR module. This module is only
1848 a very small wrapper that allows dynamic modules to be loaded on runtime
1849 instead of being compiled into the application. To enable the dynlib module it
1850 has to be compiled into the daemon, and the word "dynlib" has to be put in the
1851 \fBmodule\-config:\fR option. Multiple instances of dynamic libraries are
1852 supported by adding the word "dynlib" more than once.
1853 .LP
1854 The \fBdynlib\-file:\fR path should be specified as an absolute path relative
1855 to the new path set by \fBchroot:\fR option, or as a relative path to the
1856 working directory.
1857 .TP
1858 .B dynlib\-file: \fI<dynlib file>\fR
1859 The dynamic library file to load. Repeat this option for every dynlib module
1860 instance added to the \fBmodule\-config:\fR option.
18111861 .SS "DNS64 Module Options"
18121862 .LP
18131863 The dns64 module must be configured in the \fBmodule\-config:\fR "dns64
20592109 cached too much data;
20602110 if necessary the Redis server must be configured to limit the cache size,
20612111 preferably with some kind of least-recently-used eviction policy.
2112 Additionaly, the \fBredis\-expire\-records\fR option can be used in order to
2113 set the relative DNS TTL of the message as timeout to the Redis records; keep
2114 in mind that some additional memory is used per key and that the expire
2115 information is stored as absolute Unix timestamps in Redis (computer time must
2116 be stable).
20622117 This backend uses synchronous communication with the Redis server
20632118 based on the assumption that the communication is stable and sufficiently
20642119 fast.
21132168 if the Redis server does not have the requested data, and will try to
21142169 re-establish a new connection later.
21152170 This option defaults to 100 milliseconds.
2171 .TP
2172 .B redis-expire-records: \fI<yes or no>
2173 If Redis record expiration is enabled. If yes, unbound sets timeout for Redis
2174 records so that Redis can evict keys that have expired automatically. If
2175 unbound is configured with \fBserve-expired\fR and \fBserve-expired-ttl\fR is 0,
2176 this option is internally reverted to "no". Redis SETEX support is required
2177 for this option (Redis >= 2.0.0).
2178 This option defaults to no.
2179 .SS DNSTAP Logging Options
2180 DNSTAP support, when compiled in, is enabled in the \fBdnstap:\fR section.
2181 This starts an extra thread (when compiled with threading) that writes
2182 the log information to the destination. If unbound is compiled without
2183 threading it does not spawn a thread, but connects per-process to the
2184 destination.
2185 .TP
2186 .B dnstap-enable: \fI<yes or no>
2187 If dnstap is enabled. Default no. If yes, it connects to the dnstap server
2188 and if any of the dnstap-log-..-messages options is enabled it sends logs
2189 for those messages to the server.
2190 .TP
2191 .B dnstap-bidirectional: \fI<yes or no>
2192 Use frame streams in bidirectional mode to transfer DNSTAP messages. Default is
2193 yes.
2194 .TP
2195 .B dnstap-socket-path: \fI<file name>
2196 Sets the unix socket file name for connecting to the server that is
2197 listening on that socket. Default is "@DNSTAP_SOCKET_PATH@".
2198 .TP
2199 .B dnstap-ip: \fI<IPaddress[@port]>
2200 If "", the unix socket is used, if set with an IP address (IPv4 or IPv6)
2201 that address is used to connect to the server.
2202 .TP
2203 .B dnstap-tls: \fI<yes or no>
2204 Set this to use TLS to connect to the server specified in \fBdnstap-ip\fR.
2205 The default is yes. If set to no, TCP is used to connect to the server.
2206 .TP
2207 .B dnstap-tls-server-name: \fI<name of TLS authentication>
2208 The TLS server name to authenticate the server with. Used when \fBdnstap-tls\fR is enabled. If "" it is ignored, default "".
2209 .TP
2210 .B dnstap-tls-cert-bundle: \fI<file name of cert bundle>
2211 The pem file with certs to verify the TLS server certificate. If "" the
2212 server default cert bundle is used, or the windows cert bundle on windows.
2213 Default is "".
2214 .TP
2215 .B dnstap-tls-client-key-file: \fI<file name>
2216 The client key file for TLS client authentication. If "" client
2217 authentication is not used. Default is "".
2218 .TP
2219 .B dnstap-tls-client-cert-file: \fI<file name>
2220 The client cert file for TLS client authentication. Default is "".
2221 .TP
2222 .B dnstap-send-identity: \fI<yes or no>
2223 If enabled, the server identity is included in the log messages.
2224 Default is no.
2225 .TP
2226 .B dnstap-send-version: \fI<yes or no>
2227 If enabled, the server version if included in the log messages.
2228 Default is no.
2229 .TP
2230 .B dnstap-identity: \fI<string>
2231 The identity to send with messages, if "" the hostname is used.
2232 Default is "".
2233 .TP
2234 .B dnstap-version: \fI<string>
2235 The version to send with messages, if "" the package version is used.
2236 Default is "".
2237 .TP
2238 .B dnstap-log-resolver-query-messages: \fI<yes or no>
2239 Enable to log resolver query messages. Default is no.
2240 These are messages from unbound to upstream servers.
2241 .TP
2242 .B dnstap-log-resolver-response-messages: \fI<yes or no>
2243 Enable to log resolver response messages. Default is no.
2244 These are replies from upstream servers to unbound.
2245 .TP
2246 .B dnstap-log-client-query-messages: \fI<yes or no>
2247 Enable to log client query messages. Default is no.
2248 These are client queries to unbound.
2249 .TP
2250 .B dnstap-log-client-response-messages: \fI<yes or no>
2251 Enable to log client response messages. Default is no.
2252 These are responses from unbound to clients.
2253 .TP
2254 .B dnstap-log-forwarder-query-messages: \fI<yes or no>
2255 Enable to log forwarder query messages. Default is no.
2256 .TP
2257 .B dnstap-log-forwarder-response-messages: \fI<yes or no>
2258 Enable to log forwarder response messages. Default is no.
21162259 .SS Response Policy Zone Options
21172260 .LP
21182261 Response Policy Zones are configured with \fBrpz:\fR, and each one must have a
0 /**
1 * \file
2 * This file contains the dynamic library module for Unbound.
3 * This loads a dynamic library (.dll, .so) and calls that for the
4 * module actions.
5 */
6 #include "config.h"
7 #include "util/module.h"
8 #include "util/config_file.h"
9 #include "dynlibmod/dynlibmod.h"
10
11 #if HAVE_WINDOWS_H
12 #include <windows.h>
13 #define __DYNMOD HMODULE
14 #define __DYNSYM FARPROC
15 #define __LOADSYM GetProcAddress
16 void log_dlerror() {
17 DWORD dwLastError = GetLastError();
18 LPSTR MessageBuffer;
19 DWORD dwBufferLength;
20 DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER |
21 FORMAT_MESSAGE_IGNORE_INSERTS |
22 FORMAT_MESSAGE_FROM_SYSTEM ;
23 if((dwBufferLength = FormatMessageA(
24 dwFormatFlags,
25 NULL, // module to get message from (NULL == system)
26 dwLastError,
27 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // default language
28 (LPSTR) &MessageBuffer,
29 0,
30 NULL
31 )))
32 {
33 log_err("dynlibmod: %s (%ld)", MessageBuffer, dwLastError);
34 LocalFree(MessageBuffer);
35 }
36
37 }
38
39 HMODULE open_library(const char* fname) {
40 return LoadLibrary(fname);
41 }
42
43 void close_library(const char* fname, __DYNMOD handle) {
44 (void)fname;
45 (void)handle;
46 }
47 #else
48 #include <dlfcn.h>
49 #define __DYNMOD void*
50 #define __DYNSYM void*
51 #define __LOADSYM dlsym
52 void log_dlerror() {
53 log_err("dynlibmod: %s", dlerror());
54 }
55
56 void* open_library(const char* fname) {
57 return dlopen(fname, RTLD_LAZY | RTLD_GLOBAL);
58 }
59
60 void close_library(const char* fname, __DYNMOD handle) {
61 if(!handle) return;
62 if(dlclose(handle) != 0) {
63 log_err("dlclose %s: %s", fname, strerror(errno));
64 }
65 }
66 #endif
67
68 /** module counter for multiple dynlib modules */
69 static int dynlib_mod_count = 0;
70
71 /** dynlib module init */
72 int dynlibmod_init(struct module_env* env, int id) {
73 int dynlib_mod_idx = dynlib_mod_count++;
74 struct config_strlist* cfg_item = env->cfg->dynlib_file;
75 struct dynlibmod_env* de = (struct dynlibmod_env*)calloc(1, sizeof(struct dynlibmod_env));
76 __DYNMOD dynamic_library;
77 if (!de)
78 {
79 log_err("dynlibmod[%d]: malloc failure", dynlib_mod_idx);
80 return 0;
81 }
82
83 env->modinfo[id] = (void*) de;
84
85 de->fname = NULL;
86 for(int i = dynlib_mod_idx;
87 i != 0 && cfg_item != NULL;
88 i--, cfg_item = cfg_item->next) {}
89
90 if (cfg_item == NULL || cfg_item->str == NULL || cfg_item->str[0] == 0) {
91 log_err("dynlibmod[%d]: no dynamic library given.", dynlib_mod_idx);
92 return 0;
93 } else {
94 de->fname = cfg_item->str;
95 }
96 verbose(VERB_ALGO, "dynlibmod[%d]: Trying to load library %s", dynlib_mod_idx, de->fname);
97 dynamic_library = open_library(de->fname);
98 de->dynamic_library = (void*)dynamic_library;
99 if (dynamic_library == NULL) {
100 log_dlerror();
101 log_err("dynlibmod[%d]: unable to load dynamic library \"%s\".", dynlib_mod_idx, de->fname);
102 return 0;
103 } else {
104 __DYNSYM initializer;
105 __DYNSYM deinitializer;
106 __DYNSYM operate;
107 __DYNSYM inform;
108 __DYNSYM clear;
109 __DYNSYM get_mem;
110 initializer = __LOADSYM(dynamic_library,"init");
111 if (initializer == NULL) {
112 log_dlerror();
113 log_err("dynlibmod[%d]: unable to load init procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname);
114 return 0;
115 } else {
116 de->func_init = (func_init_t)(void*)initializer;
117 }
118 deinitializer = __LOADSYM(dynamic_library,"deinit");
119 if (deinitializer == NULL) {
120 log_dlerror();
121 log_err("dynlibmod[%d]: unable to load deinit procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname);
122 return 0;
123 } else {
124 de->func_deinit = (func_deinit_t)(void*)deinitializer;
125 }
126 operate = __LOADSYM(dynamic_library,"operate");
127 if (operate == NULL) {
128 log_dlerror();
129 log_err("dynlibmod[%d]: unable to load operate procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname);
130 return 0;
131 } else {
132 de->func_operate = (func_operate_t)(void*)operate;
133 }
134 inform = __LOADSYM(dynamic_library,"inform_super");
135 if (inform == NULL) {
136 log_dlerror();
137 log_err("dynlibmod[%d]: unable to load inform_super procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname);
138 return 0;
139 } else {
140 de->func_inform = (func_inform_t)(void*)inform;
141 }
142 clear = __LOADSYM(dynamic_library,"clear");
143 if (clear == NULL) {
144 log_dlerror();
145 log_err("dynlibmod[%d]: unable to load clear procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname);
146 return 0;
147 } else {
148 de->func_clear = (func_clear_t)(void*)clear;
149 }
150 get_mem = __LOADSYM(dynamic_library,"get_mem");
151 if (get_mem == NULL) {
152 log_dlerror();
153 log_err("dynlibmod[%d]: unable to load get_mem procedure from dynamic library \"%s\".", dynlib_mod_idx, de->fname);
154 return 0;
155 } else {
156 de->func_get_mem = (func_get_mem_t)(void*)get_mem;
157 }
158 }
159 de->inplace_cb_delete_wrapped = &inplace_cb_delete_wrapped;
160 de->inplace_cb_register_wrapped = &inplace_cb_register_wrapped;
161 return de->func_init(env, id);
162 }
163
164 /** dynlib module deinit */
165 void dynlibmod_deinit(struct module_env* env, int id) {
166 struct dynlibmod_env* de = env->modinfo[id];
167 if(de == NULL)
168 return;
169 de->func_deinit(env, id);
170 close_library(de->fname, (__DYNMOD)de->dynamic_library);
171 dynlib_mod_count--;
172 de->fname = NULL;
173 free(de);
174 }
175
176 /** dynlib module operate on a query */
177 void dynlibmod_operate(struct module_qstate* qstate, enum module_ev event,
178 int id, struct outbound_entry* outbound) {
179 struct dynlibmod_env* de = qstate->env->modinfo[id];
180
181 de->func_operate(qstate, event, id, outbound);
182 }
183
184 /** dynlib module */
185 void dynlibmod_inform_super(struct module_qstate* qstate, int id,
186 struct module_qstate* super) {
187 struct dynlibmod_env* de = qstate->env->modinfo[id];
188
189 de->func_inform(qstate, id, super);
190 }
191
192 /** dynlib module cleanup query state */
193 void dynlibmod_clear(struct module_qstate* qstate, int id) {
194 struct dynlibmod_env* de = qstate->env->modinfo[id];
195
196 de->func_clear(qstate, id);
197 }
198
199 /** dynlib module alloc size routine */
200 size_t dynlibmod_get_mem(struct module_env* env, int id) {
201 struct dynlibmod_env* de = (struct dynlibmod_env*)env->modinfo[id];
202 size_t size;
203 verbose(VERB_ALGO, "dynlibmod: get_mem, id: %d, de:%p", id, de);
204 if(!de)
205 return 0;
206
207 size = de->func_get_mem(env, id);
208 return size + sizeof(*de);
209 }
210
211 int dynlib_inplace_cb_reply_generic(struct query_info* qinfo,
212 struct module_qstate* qstate, struct reply_info* rep, int rcode,
213 struct edns_data* edns, struct edns_option** opt_list_out,
214 struct comm_reply* repinfo, struct regional* region, int id,
215 void* callback) {
216 struct cb_pair* cb_pair = (struct cb_pair*) callback;
217 return ((inplace_cb_reply_func_type*) cb_pair->cb)(qinfo, qstate, rep, rcode, edns, opt_list_out, repinfo, region, id, cb_pair->cb_arg);
218 }
219
220 int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags,
221 struct module_qstate* qstate, struct sockaddr_storage* addr,
222 socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region,
223 int id, void* callback) {
224 struct cb_pair* cb_pair = (struct cb_pair*) callback;
225 return ((inplace_cb_query_func_type*) cb_pair->cb)(qinfo, flags, qstate, addr, addrlen, zone, zonelen, region, id, cb_pair->cb_arg);
226 }
227
228 int dynlib_inplace_cb_edns_back_parsed(struct module_qstate* qstate,
229 int id, void* cb_args) {
230 struct cb_pair* cb_pair = (struct cb_pair*) cb_args;
231 return ((inplace_cb_edns_back_parsed_func_type*) cb_pair->cb)(qstate, id, cb_pair->cb_arg);
232 }
233
234 int dynlib_inplace_cb_query_response(struct module_qstate* qstate,
235 struct dns_msg* response, int id, void* cb_args) {
236 struct cb_pair* cb_pair = (struct cb_pair*) cb_args;
237 return ((inplace_cb_query_response_func_type*) cb_pair->cb)(qstate, response, id, cb_pair->cb_arg);
238 }
239
240 int
241 inplace_cb_register_wrapped(void* cb, enum inplace_cb_list_type type, void* cbarg,
242 struct module_env* env, int id) {
243 struct cb_pair* cb_pair = malloc(sizeof(struct cb_pair));
244 cb_pair->cb = cb;
245 cb_pair->cb_arg = cbarg;
246 if(type >= inplace_cb_reply && type <= inplace_cb_reply_servfail) {
247 return inplace_cb_register(&dynlib_inplace_cb_reply_generic, type, (void*) cb_pair, env, id);
248 } else if(type == inplace_cb_query) {
249 return inplace_cb_register(&dynlib_inplace_cb_query_generic, type, (void*) cb_pair, env, id);
250 } else if(type == inplace_cb_query_response) {
251 return inplace_cb_register(&dynlib_inplace_cb_query_response, type, (void*) cb_pair, env, id);
252 } else if(type == inplace_cb_edns_back_parsed) {
253 return inplace_cb_register(&dynlib_inplace_cb_edns_back_parsed, type, (void*) cb_pair, env, id);
254 } else {
255 return 0;
256 }
257 }
258
259 void
260 inplace_cb_delete_wrapped(struct module_env* env, enum inplace_cb_list_type type,
261 int id) {
262 struct inplace_cb* temp = env->inplace_cb_lists[type];
263 struct inplace_cb* prev = NULL;
264
265 while(temp) {
266 if(temp->id == id) {
267 if(!prev) {
268 env->inplace_cb_lists[type] = temp->next;
269 free(temp->cb_arg);
270 free(temp);
271 temp = env->inplace_cb_lists[type];
272 }
273 else {
274 prev->next = temp->next;
275 free(temp->cb_arg);
276 free(temp);
277 temp = prev->next;
278 }
279 }
280 else {
281 prev = temp;
282 temp = temp->next;
283 }
284 }
285 }
286
287
288 /**
289 * The module function block
290 */
291 static struct module_func_block dynlibmod_block = {
292 "dynlib",
293 &dynlibmod_init, &dynlibmod_deinit, &dynlibmod_operate, &dynlibmod_inform_super,
294 &dynlibmod_clear, &dynlibmod_get_mem
295 };
296
297 struct module_func_block* dynlibmod_get_funcblock(void)
298 {
299 return &dynlibmod_block;
300 }
0 /*
1 * dynlibmod.h: module header file
2 *
3 * Copyright (c) 2019, Peter Munch-Ellingsen (peterme AT peterme.net)
4 *
5 * This software is open source.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the following disclaimer.
13 *
14 * * Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 *
18 * * Neither the name of the organization nor the names of its
19 * contributors may be used to endorse or promote products derived from this
20 * software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 */
34 /**
35 * \file
36 * Dynamic loading module for unbound. Loads dynamic library.
37 */
38 #ifndef DYNLIBMOD_H
39 #define DYNLIBMOD_H
40 #include "util/module.h"
41 #include "services/outbound_list.h"
42
43 /**
44 * Get the module function block.
45 * @return: function block with function pointers to module methods.
46 */
47 struct module_func_block* dynlibmod_get_funcblock(void);
48
49 /** dynlib module init */
50 int dynlibmod_init(struct module_env* env, int id);
51
52 /** dynlib module deinit */
53 void dynlibmod_deinit(struct module_env* env, int id);
54
55 /** dynlib module operate on a query */
56 void dynlibmod_operate(struct module_qstate* qstate, enum module_ev event,
57 int id, struct outbound_entry* outbound);
58
59 /** dynlib module */
60 void dynlibmod_inform_super(struct module_qstate* qstate, int id,
61 struct module_qstate* super);
62
63 /** dynlib module cleanup query state */
64 void dynlibmod_clear(struct module_qstate* qstate, int id);
65
66 /** dynlib module alloc size routine */
67 size_t dynlibmod_get_mem(struct module_env* env, int id);
68
69 int dynlib_inplace_cb_reply_generic(struct query_info* qinfo,
70 struct module_qstate* qstate, struct reply_info* rep, int rcode,
71 struct edns_data* edns, struct edns_option** opt_list_out,
72 struct comm_reply* repinfo, struct regional* region, int id,
73 void* callback);
74
75 int dynlib_inplace_cb_query_generic(struct query_info* qinfo, uint16_t flags,
76 struct module_qstate* qstate, struct sockaddr_storage* addr,
77 socklen_t addrlen, uint8_t* zone, size_t zonelen, struct regional* region,
78 int id, void* callback);
79
80 int dynlib_inplace_cb_edns_back_parsed(struct module_qstate* qstate,
81 int id, void* cb_args);
82
83 int dynlib_inplace_cb_query_response(struct module_qstate* qstate,
84 struct dns_msg* response, int id, void* cb_args);
85
86 int
87 inplace_cb_register_wrapped(void* cb, enum inplace_cb_list_type type, void* cbarg,
88 struct module_env* env, int id);
89
90 void
91 inplace_cb_delete_wrapped(struct module_env* env, enum inplace_cb_list_type type,
92 int id);
93
94 struct cb_pair {
95 void *cb;
96 void *cb_arg;
97 };
98
99 /**
100 * Global state for the module.
101 */
102
103 typedef int (*func_init_t)(struct module_env*, int);
104 typedef void (*func_deinit_t)(struct module_env*, int);
105 typedef void (*func_operate_t)(struct module_qstate*, enum module_ev, int, struct outbound_entry*);
106 typedef void (*func_inform_t)(struct module_qstate*, int, struct module_qstate*);
107 typedef void (*func_clear_t)(struct module_qstate*, int);
108 typedef size_t (*func_get_mem_t)(struct module_env*, int);
109 typedef void (*inplace_cb_delete_wrapped_t)(struct module_env*, enum inplace_cb_list_type, int);
110 typedef int (*inplace_cb_register_wrapped_t)(void*, enum inplace_cb_list_type, void*, struct module_env*, int);
111
112
113 struct dynlibmod_env {
114 /** Dynamic library filename. */
115 const char* fname;
116 /** dynamic library handle */
117 void* dynamic_library;
118 /** Module init function */
119 func_init_t func_init;
120 /** Module deinit function */
121 func_deinit_t func_deinit;
122 /** Module operate function */
123 func_operate_t func_operate;
124 /** Module super_inform function */
125 func_inform_t func_inform;
126 /** Module clear function */
127 func_clear_t func_clear;
128 /** Module get_mem function */
129 func_get_mem_t func_get_mem;
130 /** Wrapped inplace callback functions to circumvent callback whitelisting */
131 inplace_cb_delete_wrapped_t inplace_cb_delete_wrapped;
132 inplace_cb_register_wrapped_t inplace_cb_register_wrapped;
133 /** Pointer to any data the dynamic library might want to keep */
134 void *dyn_env;
135 };
136
137
138 #endif /* DYNLIBMOD_H */
0 /**
1 * \file
2 *
3 * This is an example to show how dynamic libraries can be made to work with
4 * unbound. To build a .so file simply run:
5 * gcc -I../.. -shared -Wall -Werror -fpic -o helloworld.so helloworld.c
6 * And to build for windows, first make unbound with the --with-dynlibmod
7 * switch, then use this command:
8 * x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic
9 * -o helloworld.dll helloworld.c -L../.. -l:libunbound.a
10 * to cross-compile a 64-bit Windows DLL.
11 */
12
13 #include "../../config.h"
14 #include "../../util/module.h"
15 #include "../../sldns/parseutil.h"
16 #include "../dynlibmod.h"
17
18 /* Declare the EXPORT macro that expands to exporting the symbol for DLLs when
19 * compiling for Windows. All procedures marked with EXPORT in this example are
20 * called directly by the dynlib module and must be present for the module to
21 * load correctly. */
22 #ifdef HAVE_WINDOWS_H
23 #define EXPORT __declspec(dllexport)
24 #else
25 #define EXPORT
26 #endif
27
28 /* Forward declare a callback, implemented at the bottom of this file */
29 int reply_callback(struct query_info* qinfo,
30 struct module_qstate* qstate, struct reply_info* rep, int rcode,
31 struct edns_data* edns, struct edns_option** opt_list_out,
32 struct comm_reply* repinfo, struct regional* region, int id,
33 void* callback);
34
35 /* Init is called when the module is first loaded. It should be used to set up
36 * the environment for this module and do any other initialisation required. */
37 EXPORT int init(struct module_env* env, int id) {
38 log_info("dynlib: hello world from init");
39 struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id];
40 de->inplace_cb_register_wrapped(&reply_callback,
41 inplace_cb_reply,
42 NULL, env, id);
43 struct dynlibmod_env* local_env = env->modinfo[id];
44 local_env->dyn_env = NULL;
45 return 1;
46 }
47
48 /* Deinit is run as the program is shutting down. It should be used to clean up
49 * the environment and any left over data. */
50 EXPORT void deinit(struct module_env* env, int id) {
51 log_info("dynlib: hello world from deinit");
52 struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id];
53 de->inplace_cb_delete_wrapped(env, inplace_cb_reply, id);
54 if (de->dyn_env != NULL) free(de->dyn_env);
55 }
56
57 /* Operate is called every time a query passes by this module. The event can be
58 * used to determine which direction in the module chain it came from. */
59 EXPORT void operate(struct module_qstate* qstate, enum module_ev event,
60 int id, struct outbound_entry* entry) {
61 log_info("dynlib: hello world from operate");
62 log_info("dynlib: incoming query: %s %s(%d) %s(%d)",
63 qstate->qinfo.qname,
64 sldns_lookup_by_id(sldns_rr_classes, qstate->qinfo.qclass)->name,
65 qstate->qinfo.qclass,
66 sldns_rr_descript(qstate->qinfo.qtype)->_name,
67 qstate->qinfo.qtype);
68 if (event == module_event_new || event == module_event_pass) {
69 qstate->ext_state[id] = module_wait_module;
70 struct dynlibmod_env* env = qstate->env->modinfo[id];
71 if (env->dyn_env == NULL) {
72 env->dyn_env = calloc(3, sizeof(int));
73 ((int *)env->dyn_env)[0] = 42;
74 ((int *)env->dyn_env)[1] = 102;
75 ((int *)env->dyn_env)[2] = 192;
76 } else {
77 log_err("dynlib: already has data!");
78 qstate->ext_state[id] = module_error;
79 }
80 } else if (event == module_event_moddone) {
81 qstate->ext_state[id] = module_finished;
82 } else {
83 qstate->ext_state[id] = module_error;
84 }
85 }
86
87 /* Inform super is called when a query is completed or errors out, but only if
88 * a sub-query has been registered to it by this module. Look at
89 * mesh_attach_sub in services/mesh.h to see how this is done. */
90 EXPORT void inform_super(struct module_qstate* qstate, int id,
91 struct module_qstate* super) {
92 log_info("dynlib: hello world from inform_super");
93 }
94
95 /* Clear is called once a query is complete and the response has been sent
96 * back. It is used to clear up any per-query allocations. */
97 EXPORT void clear(struct module_qstate* qstate, int id) {
98 log_info("dynlib: hello world from clear");
99 struct dynlibmod_env* env = qstate->env->modinfo[id];
100 if (env->dyn_env != NULL) {
101 free(env->dyn_env);
102 env->dyn_env = NULL;
103 }
104 }
105
106 /* Get mem is called when Unbound is printing performance information. This
107 * only happens explicitly and is only used to show memory usage to the user. */
108 EXPORT size_t get_mem(struct module_env* env, int id) {
109 log_info("dynlib: hello world from get_mem");
110 return 0;
111 }
112
113 /* The callback that was forward declared earlier. It is registered in the init
114 * procedure to run when a query is being replied to. */
115 int reply_callback(struct query_info* qinfo,
116 struct module_qstate* qstate, struct reply_info* rep, int rcode,
117 struct edns_data* edns, struct edns_option** opt_list_out,
118 struct comm_reply* repinfo, struct regional* region, int id,
119 void* callback) {
120 log_info("dynlib: hello world from callback");
121 struct dynlibmod_env* env = qstate->env->modinfo[id];
122 if (env->dyn_env != NULL) {
123 log_info("dynlib: numbers gotten from query: %d, %d, and %d",
124 ((int *)env->dyn_env)[0],
125 ((int *)env->dyn_env)[1],
126 ((int *)env->dyn_env)[2]);
127 }
128 return 0;
129 }
385385 rep->flags |= (BIT_RA | BIT_QR); /* fix flags to be sensible for */
386386 rep->flags &= ~(BIT_AA | BIT_CD);/* a reply based on the cache */
387387 addrtree_insert(tree, (addrkey_t*)edns->subnet_addr,
388 edns->subnet_source_mask,
389 sq->ecs_server_in.subnet_scope_mask, rep,
388 edns->subnet_source_mask, sq->max_scope, rep,
390389 rep->ttl, *qstate->env->now);
391390
392391 lock_rw_unlock(&lru_entry->lock);
542541 c_out->subnet_addr_fam = c_in->subnet_addr_fam;
543542 c_out->subnet_source_mask = c_in->subnet_source_mask;
544543 memcpy(&c_out->subnet_addr, &c_in->subnet_addr, INET6_SIZE);
545 c_out->subnet_scope_mask = s_in->subnet_scope_mask;
544 c_out->subnet_scope_mask = sq->max_scope;
546545 /* Limit scope returned to client to scope used for caching. */
547546 if(c_out->subnet_addr_fam == EDNSSUBNET_ADDRFAM_IP4) {
548547 if(c_out->subnet_scope_mask >
647646 qstate->env->cfg->client_subnet_opcode);
648647 sq->subnet_sent = 0;
649648 memset(&sq->ecs_server_out, 0, sizeof(sq->ecs_server_out));
649 } else if (!sq->track_max_scope &&
650 FLAGS_GET_RCODE(response->rep->flags) == LDNS_RCODE_NOERROR &&
651 response->rep->an_numrrsets > 0
652 ) {
653 struct ub_packed_rrset_key* s = response->rep->rrsets[0];
654 if(ntohs(s->rk.type) == LDNS_RR_TYPE_CNAME &&
655 query_dname_compare(qstate->qinfo.qname,
656 s->rk.dname) == 0) {
657 /* CNAME response for QNAME. From now on keep track of
658 * longest received ECS prefix for all queries on this
659 * qstate. */
660 sq->track_max_scope = 1;
661 }
650662 }
651663 return 1;
652664 }
662674 return 1;
663675 if((ecs_opt = edns_opt_list_find(
664676 qstate->edns_opts_back_in,
665 qstate->env->cfg->client_subnet_opcode))) {
666 if(parse_subnet_option(ecs_opt, &sq->ecs_server_in) &&
667 sq->subnet_sent &&
668 sq->ecs_server_in.subnet_validdata)
677 qstate->env->cfg->client_subnet_opcode)) &&
678 parse_subnet_option(ecs_opt, &sq->ecs_server_in) &&
679 sq->subnet_sent && sq->ecs_server_in.subnet_validdata) {
669680 /* Only skip global cache store if we sent an ECS option
670681 * and received one back. Answers from non-whitelisted
671682 * servers will end up in global cache. Answers for
672683 * queries with 0 source will not (unless nameserver
673684 * does not support ECS). */
674685 qstate->no_cache_store = 1;
686 if(!sq->track_max_scope || (sq->track_max_scope &&
687 sq->ecs_server_in.subnet_scope_mask >
688 sq->max_scope))
689 sq->max_scope = sq->ecs_server_in.subnet_scope_mask;
675690 }
676691
677692 return 1;
4444 #include "util/alloc.h"
4545 #include "util/net_help.h"
4646 #include "util/storage/slabhash.h"
47 #include "util/data/dname.h"
4748 #include "edns-subnet/addrtree.h"
4849 #include "edns-subnet/edns-subnet.h"
4950
8283 struct ecs_data ecs_server_out;
8384 int subnet_downstream;
8485 int subnet_sent;
86 /** keep track of longest received scope, set after receiving CNAME for
87 * incoming QNAME. */
88 int track_max_scope;
89 /** longest received scope mask since track_max_scope is set. This value
90 * is used for caching and answereing to client. */
91 uint8_t max_scope;
8592 /** has the subnet module been started with no_cache_store? */
8693 int started_no_cache_store;
8794 };
483483 got_num = num4ok;
484484 *selected_rtt = num4_lowrtt;
485485 }
486 } else if (env->cfg->prefer_ip4) {
487 int got_num4 = 0;
488 int low_rtt4 = 0;
489 int i;
490 int attempt = -1; /* filter to make sure addresses have
491 less attempts on them than the first, to force round
492 robin when all the IPv4 addresses fail */
493 int num6ok = 0; /* number ip6 at low attempt count */
494 int num6_lowrtt = 0;
495 prev = NULL;
496 a = dp->result_list;
497 for(i = 0; i < got_num; i++) {
498 swap_to_front = 0;
499 if(a->addr.ss_family != AF_INET && attempt == -1) {
500 /* if we only have ip6 at low attempt count,
501 * then ip4 is failing, and we need to
502 * select one of the remaining IPv6 addrs */
503 attempt = a->attempts;
504 num6ok++;
505 num6_lowrtt = a->sel_rtt;
506 } else if(a->addr.ss_family != AF_INET && attempt == a->attempts) {
507 num6ok++;
508 if(num6_lowrtt == 0 || a->sel_rtt < num6_lowrtt) {
509 num6_lowrtt = a->sel_rtt;
510 }
511 }
512 if(a->addr.ss_family == AF_INET) {
513 if(attempt == -1) {
514 attempt = a->attempts;
515 } else if(a->attempts > attempt) {
516 break;
517 }
518 got_num4++;
519 swap_to_front = 1;
520 if(low_rtt4 == 0 || a->sel_rtt < low_rtt4) {
521 low_rtt4 = a->sel_rtt;
522 }
523 }
524 /* swap to front if IPv4, or move to next result */
525 if(swap_to_front && prev) {
526 n = a->next_result;
527 prev->next_result = n;
528 a->next_result = dp->result_list;
529 dp->result_list = a;
530 a = n;
531 } else {
532 prev = a;
533 a = a->next_result;
534 }
535 }
536 if(got_num4 > 0) {
537 got_num = got_num4;
538 *selected_rtt = low_rtt4;
539 } else if(num6ok > 0) {
540 got_num = num6ok;
541 *selected_rtt = num6_lowrtt;
542 }
486543 }
487544 return got_num;
488545 }
161161 iq->qchase = qstate->qinfo;
162162 outbound_list_init(&iq->outlist);
163163 iq->minimise_count = 0;
164 iq->minimise_timeout_count = 0;
164 iq->timeout_count = 0;
165165 if (qstate->env->cfg->qname_minimisation)
166166 iq->minimisation_state = INIT_MINIMISE_STATE;
167167 else
22382238 iq->qinfo_out.qname = iq->qchase.qname;
22392239 iq->qinfo_out.qname_len = iq->qchase.qname_len;
22402240 iq->minimise_count++;
2241 iq->minimise_timeout_count = 0;
2241 iq->timeout_count = 0;
22422242
22432243 iter_dec_attempts(iq->dp, 1);
22442244
23262326 }
23272327 }
23282328 if(iq->minimisation_state == SKIP_MINIMISE_STATE) {
2329 if(iq->minimise_timeout_count < MAX_MINIMISE_TIMEOUT_COUNT)
2329 if(iq->timeout_count < MAX_MINIMISE_TIMEOUT_COUNT)
23302330 /* Do not increment qname, continue incrementing next
23312331 * iteration */
23322332 iq->minimisation_state = MINIMISE_STATE;
26672667 if(iq->response == NULL) {
26682668 /* Don't increment qname when QNAME minimisation is enabled */
26692669 if(qstate->env->cfg->qname_minimisation) {
2670 iq->minimise_timeout_count++;
26712670 iq->minimisation_state = SKIP_MINIMISE_STATE;
26722671 }
2672 iq->timeout_count++;
26732673 iq->chase_to_rd = 0;
26742674 iq->dnssec_lame_query = 0;
26752675 verbose(VERB_ALGO, "query response was timeout");
26762676 return next_state(iq, QUERYTARGETS_STATE);
26772677 }
2678 iq->timeout_count = 0;
26782679 type = response_type_from_server(
26792680 (int)((iq->chase_flags&BIT_RD) || iq->chase_to_rd),
26802681 iq->response, &iq->qinfo_out, iq->dp);
36893690 iq->response = NULL;
36903691 iq->state = QUERY_RESP_STATE;
36913692 if(event == module_event_noreply || event == module_event_error) {
3692 if(event == module_event_noreply && iq->sent_count >= 3 &&
3693 if(event == module_event_noreply && iq->timeout_count >= 3 &&
36933694 qstate->env->cfg->use_caps_bits_for_id &&
36943695 !iq->caps_fallback && !is_caps_whitelisted(ie, iq)) {
36953696 /* start fallback */
397397
398398 /**
399399 * Count number of time-outs. Used to prevent resolving failures when
400 * the QNAME minimisation QTYPE is blocked. */
401 int minimise_timeout_count;
400 * the QNAME minimisation QTYPE is blocked. Used to determine if
401 * capsforid fallback should be started.*/
402 int timeout_count;
402403
403404 /** True if the current response is from auth_zone */
404405 int auth_zone_response;
7373 #include "sldns/sbuffer.h"
7474 #include "sldns/str2wire.h"
7575
76 #ifdef HAVE_TARGETCONDITIONALS_H
77 #include <TargetConditionals.h>
78 #endif
79
80 #if defined(TARGET_OS_TV) || defined(TARGET_OS_WATCH)
81 #undef HAVE_FORK
82 #endif
83
7684 /** handle new query command for bg worker */
7785 static void handle_newq(struct libworker* w, uint8_t* buf, uint32_t len);
7886
224232 w->back = outside_network_create(w->base, cfg->msg_buffer_size,
225233 (size_t)cfg->outgoing_num_ports, cfg->out_ifs,
226234 cfg->num_out_ifs, cfg->do_ip4, cfg->do_ip6,
227 cfg->do_tcp?cfg->outgoing_num_tcp:0,
235 cfg->do_tcp?cfg->outgoing_num_tcp:0, cfg->ip_dscp,
228236 w->env->infra_cache, w->env->rnd, cfg->use_caps_bits_for_id,
229237 ports, numports, cfg->unwanted_threshold,
230238 cfg->outgoing_tcp_mss, &libworker_alloc_cleanup, w,
231239 cfg->do_udp || cfg->udp_upstream_without_downstream, w->sslctx,
232 cfg->delay_close, NULL);
240 cfg->delay_close, cfg->tls_use_sni, NULL);
233241 w->env->outnet = w->back;
234242 if(!w->is_bg || w->is_bg_thread) {
235243 lock_basic_unlock(&ctx->cfglock);
10461054 log_assert(0);
10471055 }
10481056 #endif /* UB_ON_WINDOWS */
1057
1058 #ifdef USE_DNSTAP
1059 void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev),
1060 void* ATTR_UNUSED(arg))
1061 {
1062 log_assert(0);
1063 }
1064 #endif
1065
1066 #ifdef USE_DNSTAP
1067 void dtio_mainfdcallback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev),
1068 void* ATTR_UNUSED(arg))
1069 {
1070 log_assert(0);
1071 }
1072 #endif
641641 long long respip;
642642 long long dnscrypt_shared_secret;
643643 long long dnscrypt_nonce;
644 long long dynlib;
644645 } mem;
645646 };
646647
501501 ck->entry.hash = key->entry.hash;
502502 ck->entry.key = ck;
503503 ck->rk = key->rk;
504 ck->rk.dname = regional_alloc_init(region, key->rk.dname,
505 key->rk.dname_len);
506 if(!ck->rk.dname)
507 return NULL;
504 if(key->rk.dname) {
505 ck->rk.dname = regional_alloc_init(region, key->rk.dname,
506 key->rk.dname_len);
507 if(!ck->rk.dname)
508 return NULL;
509 ck->rk.dname_len = key->rk.dname_len;
510 } else {
511 ck->rk.dname = NULL;
512 ck->rk.dname_len = 0;
513 }
508514
509515 if((unsigned)data->count >= 0xffff00U)
510516 return NULL; /* guard against integer overflow in dsize */
907913 int ret = 1;
908914 struct ub_packed_rrset_key* redirect_rrset = NULL;
909915 struct rpz* r;
916 struct auth_zone* a;
910917 struct ub_packed_rrset_key* data = NULL;
911918 int rpz_used = 0;
912919 int rpz_log = 0;
948955 }
949956 if(!raddr && !view->isfirst)
950957 goto done;
958 if(!raddr && view->isfirst) {
959 lock_rw_unlock(&view->lock);
960 view = NULL;
961 }
951962 }
952963 if(!raddr && (raddr = respip_addr_lookup(rep, ipset,
953964 &rrset_id))) {
958969 ipset->tagname, ipset->num_tags);
959970 }
960971 lock_rw_rdlock(&az->rpz_lock);
961 for(r = az->rpz_first; r && !raddr; r = r->next) {
972 for(a = az->rpz_first; a && !raddr; a = a->rpz_az_next) {
973 lock_rw_rdlock(&a->lock);
974 r = a->rpz;
962975 if(!r->taglist || taglist_intersect(r->taglist,
963976 r->taglistlen, ctaglist, ctaglen)) {
964977 if((raddr = respip_addr_lookup(rep,
968981 region, &rpz_used)) {
969982 log_err("out of memory");
970983 lock_rw_unlock(&raddr->lock);
984 lock_rw_unlock(&a->lock);
971985 lock_rw_unlock(&az->rpz_lock);
972986 return 0;
973987 }
974 if(!rpz_used) {
975 lock_rw_unlock(&raddr->lock);
976 raddr = NULL;
977 actinfo->rpz_disabled++;
988 if(rpz_used) {
989 /* break to make sure 'a' stays pointed
990 * to used auth_zone, and keeps lock */
991 break;
978992 }
993 lock_rw_unlock(&raddr->lock);
994 raddr = NULL;
995 actinfo->rpz_disabled++;
979996 }
980 }
997 }
998 lock_rw_unlock(&a->lock);
981999 }
9821000 lock_rw_unlock(&az->rpz_lock);
9831001 if(raddr && !search_only) {
10301048 }
10311049 if(raddr) {
10321050 lock_rw_unlock(&raddr->lock);
1051 }
1052 if(rpz_used) {
1053 lock_rw_unlock(&a->lock);
10331054 }
10341055 return ret;
10351056 }
391391 if(az && z->rpz) {
392392 /* keep RPZ linked list intact */
393393 lock_rw_wrlock(&az->rpz_lock);
394 if(z->rpz->prev)
395 z->rpz->prev->next = z->rpz->next;
394 if(z->rpz_az_prev)
395 z->rpz_az_prev->rpz_az_next = z->rpz_az_next;
396396 else
397 az->rpz_first = z->rpz->next;
398 if(z->rpz->next)
399 z->rpz->next->prev = z->rpz->prev;
397 az->rpz_first = z->rpz_az_next;
398 if(z->rpz_az_next)
399 z->rpz_az_next->rpz_az_prev = z->rpz_az_prev;
400400 lock_rw_unlock(&az->rpz_lock);
401401 }
402402 if(z->rpz)
425425 }
426426 rbtree_init(&z->data, &auth_data_cmp);
427427 lock_rw_init(&z->lock);
428 lock_protect(&z->lock, &z->name, sizeof(*z)-sizeof(rbnode_type));
428 lock_protect(&z->lock, &z->name, sizeof(*z)-sizeof(rbnode_type)-
429 sizeof(&z->rpz_az_next)-sizeof(&z->rpz_az_prev));
429430 lock_rw_wrlock(&z->lock);
430 /* z lock protects all, except rbtree itself, which is az->lock */
431 /* z lock protects all, except rbtree itself and the rpz linked list
432 * pointers, which are protected using az->lock */
431433 if(!rbtree_insert(&az->ztree, &z->node)) {
432434 lock_rw_unlock(&z->lock);
433435 auth_zone_delete(z, NULL);
11771179 return 0;
11781180 }
11791181 if(z->rpz) {
1180 if(!(rpz_insert_rr(z->rpz, z->namelen, dname, dname_len,
1181 rr_type, rr_class, rr_ttl, rdata, rdatalen, rr,
1182 rr_len)))
1182 if(!(rpz_insert_rr(z->rpz, z->name, z->namelen, dname,
1183 dname_len, rr_type, rr_class, rr_ttl, rdata, rdatalen,
1184 rr, rr_len)))
11831185 return 0;
11841186 }
11851187 return 1;
18631865 struct auth_xfer* x = NULL;
18641866
18651867 /* create zone */
1868 if(c->isrpz) {
1869 /* if the rpz lock is needed, grab it before the other
1870 * locks to avoid a lock dependency cycle */
1871 lock_rw_wrlock(&az->rpz_lock);
1872 }
18661873 lock_rw_wrlock(&az->lock);
18671874 if(!(z=auth_zones_find_or_add_zone(az, c->name))) {
18681875 lock_rw_unlock(&az->lock);
1876 if(c->isrpz) {
1877 lock_rw_unlock(&az->rpz_lock);
1878 }
18691879 return 0;
18701880 }
18711881 if(c->masters || c->urls) {
18721882 if(!(x=auth_zones_find_or_add_xfer(az, z))) {
18731883 lock_rw_unlock(&az->lock);
18741884 lock_rw_unlock(&z->lock);
1885 if(c->isrpz) {
1886 lock_rw_unlock(&az->rpz_lock);
1887 }
18751888 return 0;
18761889 }
18771890 }
18861899 lock_basic_unlock(&x->lock);
18871900 }
18881901 lock_rw_unlock(&z->lock);
1902 if(c->isrpz) {
1903 lock_rw_unlock(&az->rpz_lock);
1904 }
18891905 return 0;
18901906 }
18911907 z->for_downstream = c->for_downstream;
18961912 fatal_exit("Could not setup RPZ zones");
18971913 return 0;
18981914 }
1899 lock_rw_wrlock(&az->rpz_lock);
1900 z->rpz->next = az->rpz_first;
1915 lock_protect(&z->lock, &z->rpz->local_zones, sizeof(*z->rpz));
1916 /* the az->rpz_lock is locked above */
1917 z->rpz_az_next = az->rpz_first;
19011918 if(az->rpz_first)
1902 az->rpz_first->prev = z->rpz;
1903 az->rpz_first = z->rpz;
1919 az->rpz_first->rpz_az_prev = z;
1920 az->rpz_first = z;
1921 }
1922 if(c->isrpz) {
19041923 lock_rw_unlock(&az->rpz_lock);
19051924 }
19061925
53305349 log_assert(xfr->task_transfer);
53315350 lock_basic_lock(&xfr->lock);
53325351 env = xfr->task_transfer->env;
5333 if(env->outnet->want_to_quit) {
5352 if(!env || env->outnet->want_to_quit) {
53345353 lock_basic_unlock(&xfr->lock);
53355354 return; /* stop on quit */
53365355 }
57695788 log_assert(xfr->task_transfer);
57705789 lock_basic_lock(&xfr->lock);
57715790 env = xfr->task_transfer->env;
5772 if(env->outnet->want_to_quit) {
5791 if(!env || env->outnet->want_to_quit) {
57735792 lock_basic_unlock(&xfr->lock);
57745793 return; /* stop on quit */
57755794 }
58115830 log_assert(xfr->task_transfer);
58125831 lock_basic_lock(&xfr->lock);
58135832 env = xfr->task_transfer->env;
5814 if(env->outnet->want_to_quit) {
5833 if(!env || env->outnet->want_to_quit) {
58155834 lock_basic_unlock(&xfr->lock);
58165835 return 0; /* stop on quit */
58175836 }
58925911 log_assert(xfr->task_transfer);
58935912 lock_basic_lock(&xfr->lock);
58945913 env = xfr->task_transfer->env;
5895 if(env->outnet->want_to_quit) {
5914 if(!env || env->outnet->want_to_quit) {
58965915 lock_basic_unlock(&xfr->lock);
58975916 return 0; /* stop on quit */
58985917 }
61066125 log_assert(xfr->task_probe);
61076126 lock_basic_lock(&xfr->lock);
61086127 env = xfr->task_probe->env;
6109 if(env->outnet->want_to_quit) {
6128 if(!env || env->outnet->want_to_quit) {
61106129 lock_basic_unlock(&xfr->lock);
61116130 return; /* stop on quit */
61126131 }
61426161 log_assert(xfr->task_probe);
61436162 lock_basic_lock(&xfr->lock);
61446163 env = xfr->task_probe->env;
6145 if(env->outnet->want_to_quit) {
6164 if(!env || env->outnet->want_to_quit) {
61466165 lock_basic_unlock(&xfr->lock);
61476166 return 0; /* stop on quit */
61486167 }
63876406 log_assert(xfr->task_probe);
63886407 lock_basic_lock(&xfr->lock);
63896408 env = xfr->task_probe->env;
6390 if(env->outnet->want_to_quit) {
6409 if(!env || env->outnet->want_to_quit) {
63916410 lock_basic_unlock(&xfr->lock);
63926411 return; /* stop on quit */
63936412 }
64646483 log_assert(xfr->task_nextprobe);
64656484 lock_basic_lock(&xfr->lock);
64666485 env = xfr->task_nextprobe->env;
6467 if(env->outnet->want_to_quit) {
6486 if(!env || env->outnet->want_to_quit) {
64686487 lock_basic_unlock(&xfr->lock);
64696488 return; /* stop on quit */
64706489 }
8181 size_t num_query_up;
8282 /** number of queries downstream */
8383 size_t num_query_down;
84 /** first rpz item in linked list */
85 struct rpz* rpz_first;
84 /** first auth zone containing rpz item in linked list */
85 struct auth_zone* rpz_first;
8686 /** rw lock for rpz linked list, needed when iterating or editing linked
8787 * list. */
8888 lock_rw_type rpz_lock;
137137 int zone_deleted;
138138 /** deletelist pointer, unused normally except during delete */
139139 struct auth_zone* delete_next;
140 /* not protected by auth_zone lock, must be last items in struct */
141 /** next auth zone containing RPZ data, or NULL */
142 struct auth_zone* rpz_az_next;
143 /** previous auth zone containing RPZ data, or NULL */
144 struct auth_zone* rpz_az_prev;
140145 };
141146
142147 /**
178178 create_udp_sock(int family, int socktype, struct sockaddr* addr,
179179 socklen_t addrlen, int v6only, int* inuse, int* noproto,
180180 int rcv, int snd, int listen, int* reuseport, int transparent,
181 int freebind, int use_systemd)
181 int freebind, int use_systemd, int dscp)
182182 {
183183 int s;
184 char* err;
184185 #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_USE_MIN_MTU) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined (SO_BINDANY)
185186 int on=1;
186187 #endif
450451 # endif
451452 #endif /* SO_SNDBUF */
452453 }
454 err = set_ip_dscp(s, family, dscp);
455 if(err != NULL)
456 log_warn("error setting IP DiffServ codepoint %d on UDP socket: %s", dscp, err);
453457 if(family == AF_INET6) {
454458 # if defined(IPV6_V6ONLY)
455459 if(v6only) {
637641
638642 int
639643 create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
640 int* reuseport, int transparent, int mss, int freebind, int use_systemd)
644 int* reuseport, int transparent, int mss, int freebind, int use_systemd, int dscp)
641645 {
642646 int s;
647 char* err;
643648 #if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) || defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY) || defined(IP_FREEBIND) || defined(SO_BINDANY)
644649 int on = 1;
645650 #endif
792797 strerror(errno));
793798 }
794799 #endif /* IP_TRANSPARENT || IP_BINDANY || SO_BINDANY */
800 err = set_ip_dscp(s, addr->ai_family, dscp);
801 if(err != NULL)
802 log_warn("error setting IP DiffServ codepoint %d on TCP socket: %s", dscp, err);
795803 if(
796804 #ifdef HAVE_SYSTEMD
797805 !got_fd_from_systemd &&
865873 return s;
866874 }
867875
876 char*
877 set_ip_dscp(int socket, int addrfamily, int dscp)
878 {
879 int ds;
880
881 if(dscp == 0)
882 return NULL;
883 ds = dscp << 2;
884 switch(addrfamily) {
885 case AF_INET6:
886 if(setsockopt(socket, IPPROTO_IPV6, IPV6_TCLASS, (void*)&ds, sizeof(ds)) < 0)
887 return sock_strerror(errno);
888 break;
889 default:
890 if(setsockopt(socket, IPPROTO_IP, IP_TOS, (void*)&ds, sizeof(ds)) < 0)
891 return sock_strerror(errno);
892 break;
893 }
894 return NULL;
895 }
896
897 # ifndef USE_WINSOCK
898 char*
899 sock_strerror(int errn)
900 {
901 return strerror(errn);
902 }
903
904 void
905 sock_close(int socket)
906 {
907 close(socket);
908 }
909
910 # else
911 char*
912 sock_strerror(int ATTR_UNUSED(errn))
913 {
914 return wsa_strerror(WSAGetLastError());
915 }
916
917 void
918 sock_close(int socket)
919 {
920 closesocket(socket);
921 }
922
923 # endif /* USE_WINSOCK */
924
868925 int
869926 create_local_accept_sock(const char *path, int* noproto, int use_systemd)
870927 {
9511008 static int
9521009 make_sock(int stype, const char* ifname, const char* port,
9531010 struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd,
954 int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd)
1011 int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd, int dscp)
9551012 {
9561013 struct addrinfo *res = NULL;
9571014 int r, s, inuse, noproto;
9791036 s = create_udp_sock(res->ai_family, res->ai_socktype,
9801037 (struct sockaddr*)res->ai_addr, res->ai_addrlen,
9811038 v6only, &inuse, &noproto, (int)rcv, (int)snd, 1,
982 reuseport, transparent, freebind, use_systemd);
1039 reuseport, transparent, freebind, use_systemd, dscp);
9831040 if(s == -1 && inuse) {
9841041 log_err("bind: address already in use");
9851042 } else if(s == -1 && noproto && hints->ai_family == AF_INET6){
9871044 }
9881045 } else {
9891046 s = create_tcp_accept_sock(res, v6only, &noproto, reuseport,
990 transparent, tcp_mss, freebind, use_systemd);
1047 transparent, tcp_mss, freebind, use_systemd, dscp);
9911048 if(s == -1 && noproto && hints->ai_family == AF_INET6){
9921049 *noip6 = 1;
9931050 }
10001057 static int
10011058 make_sock_port(int stype, const char* ifname, const char* port,
10021059 struct addrinfo *hints, int v6only, int* noip6, size_t rcv, size_t snd,
1003 int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd)
1060 int* reuseport, int transparent, int tcp_mss, int freebind, int use_systemd, int dscp)
10041061 {
10051062 char* s = strchr(ifname, '@');
10061063 if(s) {
10221079 (void)strlcpy(p, s+1, sizeof(p));
10231080 p[strlen(s+1)]=0;
10241081 return make_sock(stype, newif, p, hints, v6only, noip6,
1025 rcv, snd, reuseport, transparent, tcp_mss, freebind, use_systemd);
1082 rcv, snd, reuseport, transparent, tcp_mss, freebind, use_systemd, dscp);
10261083 }
10271084 return make_sock(stype, ifname, port, hints, v6only, noip6, rcv, snd,
1028 reuseport, transparent, tcp_mss, freebind, use_systemd);
1085 reuseport, transparent, tcp_mss, freebind, use_systemd, dscp);
10291086 }
10301087
10311088 /**
11451202 * @param freebind: set IP_FREEBIND socket option.
11461203 * @param use_systemd: if true, fetch sockets from systemd.
11471204 * @param dnscrypt_port: dnscrypt service port number
1205 * @param dscp: DSCP to use.
11481206 * @return: returns false on error.
11491207 */
11501208 static int
11531211 size_t rcv, size_t snd, int ssl_port,
11541212 struct config_strlist* tls_additional_port, int* reuseport,
11551213 int transparent, int tcp_mss, int freebind, int use_systemd,
1156 int dnscrypt_port)
1214 int dnscrypt_port, int dscp)
11571215 {
11581216 int s, noip6=0;
11591217 #ifdef USE_DNSCRYPT
11701228 if(do_auto) {
11711229 if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1,
11721230 &noip6, rcv, snd, reuseport, transparent,
1173 tcp_mss, freebind, use_systemd)) == -1) {
1231 tcp_mss, freebind, use_systemd, dscp)) == -1) {
11741232 if(noip6) {
11751233 log_warn("IPv6 protocol not available");
11761234 return 1;
11991257 /* regular udp socket */
12001258 if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1,
12011259 &noip6, rcv, snd, reuseport, transparent,
1202 tcp_mss, freebind, use_systemd)) == -1) {
1260 tcp_mss, freebind, use_systemd, dscp)) == -1) {
12031261 if(noip6) {
12041262 log_warn("IPv6 protocol not available");
12051263 return 1;
12211279 tls_additional_port);
12221280 if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1,
12231281 &noip6, 0, 0, reuseport, transparent, tcp_mss,
1224 freebind, use_systemd)) == -1) {
1282 freebind, use_systemd, dscp)) == -1) {
12251283 if(noip6) {
12261284 /*log_warn("IPv6 protocol not available");*/
12271285 return 1;
14201478 cfg->ssl_port, cfg->tls_additional_port,
14211479 reuseport, cfg->ip_transparent,
14221480 cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd,
1423 cfg->dnscrypt_port)) {
1481 cfg->dnscrypt_port, cfg->ip_dscp)) {
14241482 listening_ports_free(list);
14251483 return NULL;
14261484 }
14341492 cfg->ssl_port, cfg->tls_additional_port,
14351493 reuseport, cfg->ip_transparent,
14361494 cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd,
1437 cfg->dnscrypt_port)) {
1495 cfg->dnscrypt_port, cfg->ip_dscp)) {
14381496 listening_ports_free(list);
14391497 return NULL;
14401498 }
14501508 cfg->ssl_port, cfg->tls_additional_port,
14511509 reuseport, cfg->ip_transparent,
14521510 cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd,
1453 cfg->dnscrypt_port)) {
1511 cfg->dnscrypt_port, cfg->ip_dscp)) {
14541512 listening_ports_free(list);
14551513 return NULL;
14561514 }
14641522 cfg->ssl_port, cfg->tls_additional_port,
14651523 reuseport, cfg->ip_transparent,
14661524 cfg->tcp_mss, cfg->ip_freebind, cfg->use_systemd,
1467 cfg->dnscrypt_port)) {
1525 cfg->dnscrypt_port, cfg->ip_dscp)) {
14681526 listening_ports_free(list);
14691527 return NULL;
14701528 }
204204 * @param transparent: set IP_TRANSPARENT socket option.
205205 * @param freebind: set IP_FREEBIND socket option.
206206 * @param use_systemd: if true, fetch sockets from systemd.
207 * @param dscp: DSCP to use.
207208 * @return: the socket. -1 on error.
208209 */
209210 int create_udp_sock(int family, int socktype, struct sockaddr* addr,
210211 socklen_t addrlen, int v6only, int* inuse, int* noproto, int rcv,
211 int snd, int listen, int* reuseport, int transparent, int freebind, int use_systemd);
212 int snd, int listen, int* reuseport, int transparent, int freebind, int use_systemd, int dscp);
212213
213214 /**
214215 * Create and bind TCP listening socket
221222 * @param mss: maximum segment size of the socket. if zero, leaves the default.
222223 * @param freebind: set IP_FREEBIND socket option.
223224 * @param use_systemd: if true, fetch sockets from systemd.
225 * @param dscp: DSCP to use.
224226 * @return: the socket. -1 on error.
225227 */
226228 int create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
227 int* reuseport, int transparent, int mss, int freebind, int use_systemd);
229 int* reuseport, int transparent, int mss, int freebind, int use_systemd, int dscp);
228230
229231 /**
230232 * Create and bind local listening socket
366368 /** get the size of currently used tcp stream wait buffers (in bytes) */
367369 size_t tcp_req_info_get_stream_buffer_size(void);
368370
371 char* set_ip_dscp(int socket, int addrfamily, int ds);
372 char* sock_strerror(int errn);
373
369374 #endif /* LISTEN_DNSPORT_H */
517517 }
518518
519519 /** enter data RR into auth zone */
520 int
520 static int
521521 lz_enter_rr_into_zone(struct local_zone* z, const char* rrstr)
522522 {
523523 uint8_t* nm;
158158 return 1;
159159 if(ci_a->taglen != ci_b->taglen)
160160 return (ci_a->taglen < ci_b->taglen) ? -1 : 1;
161 cmp = memcmp(ci_a->taglist, ci_b->taglist, ci_a->taglen);
162 if(cmp != 0)
163 return cmp;
161 if(ci_a->taglist && !ci_b->taglist)
162 return -1;
163 if(!ci_a->taglist && ci_b->taglist)
164 return 1;
165 if(ci_a->taglist && ci_b->taglist) {
166 cmp = memcmp(ci_a->taglist, ci_b->taglist, ci_a->taglen);
167 if(cmp != 0)
168 return cmp;
169 }
164170 if(ci_a->tag_actions_size != ci_b->tag_actions_size)
165171 return (ci_a->tag_actions_size < ci_b->tag_actions_size) ?
166172 -1 : 1;
167 cmp = memcmp(ci_a->tag_actions, ci_b->tag_actions,
168 ci_a->tag_actions_size);
169 if(cmp != 0)
170 return cmp;
173 if(ci_a->tag_actions && !ci_b->tag_actions)
174 return -1;
175 if(!ci_a->tag_actions && ci_b->tag_actions)
176 return 1;
177 if(ci_a->tag_actions && ci_b->tag_actions) {
178 cmp = memcmp(ci_a->tag_actions, ci_b->tag_actions,
179 ci_a->tag_actions_size);
180 if(cmp != 0)
181 return cmp;
182 }
171183 if(ci_a->tag_datas != ci_b->tag_datas)
172184 return ci_a->tag_datas < ci_b->tag_datas ? -1 : 1;
173185 if(ci_a->view != ci_b->view)
12831295
12841296 void mesh_query_done(struct mesh_state* mstate)
12851297 {
1286 struct mesh_reply* r, *reply_list = NULL;
1298 struct mesh_reply* r;
12871299 struct mesh_reply* prev = NULL;
12881300 struct sldns_buffer* prev_buffer = NULL;
12891301 struct mesh_cb* c;
13071319 free(err);
13081320 }
13091321 }
1310 if(mstate->reply_list) {
1311 /* set the reply_list to NULL during the mesh_query_done
1312 * processing, so that calls back into the mesh from
1313 * tcp_req_info (deciding to drop the reply and thus
1314 * unregister the mesh_reply from the mstate) are stopped
1315 * because the list is empty.
1316 * The mstate is then likely not a reply_state, and maybe
1317 * also a detached_state.
1318 */
1319 reply_list = mstate->reply_list;
1320 mstate->reply_list = NULL;
1321 if(!mstate->reply_list && !mstate->cb_list) {
1322 /* was a reply state, not anymore */
1323 log_assert(mstate->s.env->mesh->num_reply_states > 0);
1324 mstate->s.env->mesh->num_reply_states--;
1325 }
1326 if(!mstate->reply_list && !mstate->cb_list &&
1327 mstate->super_set.count == 0)
1328 mstate->s.env->mesh->num_detached_states++;
1329 }
1330 for(r = reply_list; r; r = r->next) {
1322 for(r = mstate->reply_list; r; r = r->next) {
13311323 /* if a response-ip address block has been stored the
13321324 * information should be logged for each client. */
13331325 if(mstate->s.respip_action_info &&
13511343 /* if this query is determined to be dropped during the
13521344 * mesh processing, this is the point to take that action. */
13531345 if(mstate->s.is_drop) {
1346 /* briefly set the reply_list to NULL, so that the
1347 * tcp req info cleanup routine that calls the mesh
1348 * to deregister the meshstate for it is not done
1349 * because the list is NULL and also accounting is not
1350 * done there, but instead we do that here. */
1351 struct mesh_reply* reply_list = mstate->reply_list;
1352 mstate->reply_list = NULL;
13541353 comm_point_drop_reply(&r->query_reply);
1354 mstate->reply_list = reply_list;
13551355 } else {
13561356 struct sldns_buffer* r_buffer = r->query_reply.c->buffer;
1357 struct mesh_reply* rlist = mstate->reply_list;
13571358 if(r->query_reply.c->tcp_req_info) {
13581359 r_buffer = r->query_reply.c->tcp_req_info->spool_buffer;
13591360 prev_buffer = NULL;
13601361 }
1362 /* briefly set the replylist to null in case the
1363 * meshsendreply calls tcpreqinfo sendreply that
1364 * comm_point_drops because of size, and then the
1365 * null stops the mesh state remove and thus
1366 * reply_list modification and accounting */
1367 mstate->reply_list = NULL;
13611368 mesh_send_reply(mstate, mstate->s.return_rcode, rep,
13621369 r, r_buffer, prev, prev_buffer);
1370 mstate->reply_list = rlist;
13631371 if(r->query_reply.c->tcp_req_info) {
13641372 tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate);
13651373 r_buffer = NULL;
13671375 prev = r;
13681376 prev_buffer = r_buffer;
13691377 }
1378 }
1379 if(mstate->reply_list) {
1380 mstate->reply_list = NULL;
1381 if(!mstate->reply_list && !mstate->cb_list) {
1382 /* was a reply state, not anymore */
1383 log_assert(mstate->s.env->mesh->num_reply_states > 0);
1384 mstate->s.env->mesh->num_reply_states--;
1385 }
1386 if(!mstate->reply_list && !mstate->cb_list &&
1387 mstate->super_set.count == 0)
1388 mstate->s.env->mesh->num_detached_states++;
13701389 }
13711390 mstate->replies_sent = 1;
13721391 while((c = mstate->cb_list) != NULL) {
18621881 {
18631882 struct mesh_state* mstate = (struct mesh_state*) arg;
18641883 struct module_qstate* qstate = &mstate->s;
1865 struct mesh_reply* r;
1884 struct mesh_reply* r, *rlist;
18661885 struct mesh_area* mesh = qstate->env->mesh;
18671886 struct dns_msg* msg;
18681887 struct mesh_cb* c;
19451964 if(verbosity >= VERB_ALGO)
19461965 log_dns_msg("Serve expired lookup", &qstate->qinfo, msg->rep);
19471966
1948 r = mstate->reply_list;
1949 mstate->reply_list = NULL;
1950 if(!mstate->reply_list && !mstate->cb_list) {
1951 log_assert(mesh->num_reply_states > 0);
1952 mesh->num_reply_states--;
1953 if(mstate->super_set.count == 0) {
1954 mesh->num_detached_states++;
1955 }
1956 }
1957 for(; r; r = r->next) {
1967 for(r = mstate->reply_list; r; r = r->next) {
19581968 /* If address info is returned, it means the action should be an
19591969 * 'inform' variant and the information should be logged. */
19601970 if(actinfo.addrinfo) {
19761986 r_buffer = r->query_reply.c->buffer;
19771987 if(r->query_reply.c->tcp_req_info)
19781988 r_buffer = r->query_reply.c->tcp_req_info->spool_buffer;
1989 /* briefly set the replylist to null in case the meshsendreply
1990 * calls tcpreqinfo sendreply that comm_point_drops because
1991 * of size, and then the null stops the mesh state remove and
1992 * thus reply_list modification and accounting */
1993 rlist = mstate->reply_list;
1994 mstate->reply_list = NULL;
19791995 mesh_send_reply(mstate, LDNS_RCODE_NOERROR, msg->rep,
19801996 r, r_buffer, prev, prev_buffer);
1997 mstate->reply_list = rlist;
19811998 if(r->query_reply.c->tcp_req_info)
19821999 tcp_req_info_remove_mesh_state(r->query_reply.c->tcp_req_info, mstate);
19832000 prev = r;
19862003 /* Account for each reply sent. */
19872004 mesh->ans_expired++;
19882005
2006 }
2007 if(mstate->reply_list) {
2008 mstate->reply_list = NULL;
2009 if(!mstate->reply_list && !mstate->cb_list) {
2010 log_assert(mesh->num_reply_states > 0);
2011 mesh->num_reply_states--;
2012 if(mstate->super_set.count == 0) {
2013 mesh->num_detached_states++;
2014 }
2015 }
19892016 }
19902017 while((c = mstate->cb_list) != NULL) {
19912018 /* take this cb off the list; so that the list can be
5050 #ifdef WITH_PYTHONMODULE
5151 #include "pythonmod/pythonmod.h"
5252 #endif
53 #ifdef WITH_DYNLIBMODULE
54 #include "dynlibmod/dynlibmod.h"
55 #endif
5356 #ifdef USE_CACHEDB
5457 #include "cachedb/cachedb.h"
5558 #endif
139142 #ifdef WITH_PYTHONMODULE
140143 "python",
141144 #endif
145 #ifdef WITH_DYNLIBMODULE
146 "dynlib",
147 #endif
142148 #ifdef USE_CACHEDB
143149 "cachedb",
144150 #endif
169175 &dns64_get_funcblock,
170176 #ifdef WITH_PYTHONMODULE
171177 &pythonmod_get_funcblock,
178 #endif
179 #ifdef WITH_DYNLIBMODULE
180 &dynlibmod_get_funcblock,
172181 #endif
173182 #ifdef USE_CACHEDB
174183 &cachedb_get_funcblock,
204204 /** get TCP file descriptor for address, returns -1 on failure,
205205 * tcp_mss is 0 or maxseg size to set for TCP packets. */
206206 int
207 outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss)
207 outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp)
208208 {
209209 int s;
210 int af;
211 char* err;
210212 #ifdef SO_REUSEADDR
211213 int on = 1;
212214 #endif
213215 #ifdef INET6
214 if(addr_is_ip6(addr, addrlen))
216 if(addr_is_ip6(addr, addrlen)){
215217 s = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP);
216 else
217 #endif
218 af = AF_INET6;
219 } else {
220 #else
221 {
222 #endif
223 af = AF_INET;
218224 s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
225 }
219226 if(s == -1) {
220227 #ifndef USE_WINSOCK
221228 log_err_addr("outgoing tcp: socket", strerror(errno),
235242 }
236243 #endif
237244
245 err = set_ip_dscp(s, af, dscp);
246 if(err != NULL) {
247 verbose(VERB_ALGO, "outgoing tcp:"
248 "error setting IP DiffServ codepoint on socket");
249 }
250
238251 if(tcp_mss > 0) {
239252 #if defined(IPPROTO_TCP) && defined(TCP_MAXSEG)
240253 if(setsockopt(s, IPPROTO_TCP, TCP_MAXSEG,
290303 log_assert(pkt);
291304 log_assert(w->addrlen > 0);
292305 /* open socket */
293 s = outnet_get_tcp_fd(&w->addr, w->addrlen, w->outnet->tcp_mss);
306 s = outnet_get_tcp_fd(&w->addr, w->addrlen, w->outnet->tcp_mss, w->outnet->ip_dscp);
294307
295308 if(s == -1)
296309 return 0;
372385 comm_point_tcp_win_bio_cb(pend->c, pend->c->ssl);
373386 #endif
374387 pend->c->ssl_shake_state = comm_ssl_shake_write;
375 if(w->tls_auth_name) {
388 if(!set_auth_name_on_ssl(pend->c->ssl, w->tls_auth_name,
389 w->outnet->tls_use_sni)) {
390 pend->c->fd = s;
376391 #ifdef HAVE_SSL
377 (void)SSL_set_tlsext_host_name(pend->c->ssl, w->tls_auth_name);
378 #endif
379 }
380 #ifdef HAVE_SSL_SET1_HOST
381 if(w->tls_auth_name) {
382 SSL_set_verify(pend->c->ssl, SSL_VERIFY_PEER, NULL);
383 /* setting the hostname makes openssl verify the
384 * host name in the x509 certificate in the
385 * SSL connection*/
386 if(!SSL_set1_host(pend->c->ssl, w->tls_auth_name)) {
387 log_err("SSL_set1_host failed");
388 pend->c->fd = s;
389 SSL_free(pend->c->ssl);
390 pend->c->ssl = NULL;
391 comm_point_close(pend->c);
392 return 0;
393 }
394 }
395 #elif defined(HAVE_X509_VERIFY_PARAM_SET1_HOST)
396 /* openssl 1.0.2 has this function that can be used for
397 * set1_host like verification */
398 if(w->tls_auth_name) {
399 X509_VERIFY_PARAM* param = SSL_get0_param(pend->c->ssl);
400 X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
401 if(!X509_VERIFY_PARAM_set1_host(param, w->tls_auth_name, strlen(w->tls_auth_name))) {
402 log_err("X509_VERIFY_PARAM_set1_host failed");
403 pend->c->fd = s;
404 SSL_free(pend->c->ssl);
405 pend->c->ssl = NULL;
406 comm_point_close(pend->c);
407 return 0;
408 }
409 SSL_set_verify(pend->c->ssl, SSL_VERIFY_PEER, NULL);
410 }
411 #else
412 verbose(VERB_ALGO, "the query has an auth_name, but libssl has no call to perform TLS authentication");
413 #endif /* HAVE_SSL_SET1_HOST */
392 SSL_free(pend->c->ssl);
393 #endif
394 pend->c->ssl = NULL;
395 comm_point_close(pend->c);
396 return 0;
397 }
414398 }
415399 w->pkt = NULL;
416400 w->next_waiting = (void*)pend;
511495 comm_point_close(pc->cp);
512496 pif = pc->pif;
513497 log_assert(pif->inuse > 0);
498 #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
514499 pif->avail_ports[pif->avail_total - pif->inuse] = pc->number;
500 #endif
515501 pif->inuse--;
516502 pif->out[pc->index] = pif->out[pif->inuse];
517503 pif->out[pc->index]->index = pc->index;
724710 static int setup_if(struct port_if* pif, const char* addrstr,
725711 int* avail, int numavail, size_t numfd)
726712 {
713 #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
727714 pif->avail_total = numavail;
728715 pif->avail_ports = (int*)memdup(avail, (size_t)numavail*sizeof(int));
729716 if(!pif->avail_ports)
730717 return 0;
718 #endif
731719 if(!ipstrtoaddr(addrstr, UNBOUND_DNS_PORT, &pif->addr, &pif->addrlen) &&
732720 !netblockstrtoaddr(addrstr, UNBOUND_DNS_PORT,
733721 &pif->addr, &pif->addrlen, &pif->pfxlen))
744732 struct outside_network*
745733 outside_network_create(struct comm_base *base, size_t bufsize,
746734 size_t num_ports, char** ifs, int num_ifs, int do_ip4,
747 int do_ip6, size_t num_tcp, struct infra_cache* infra,
735 int do_ip6, size_t num_tcp, int dscp, struct infra_cache* infra,
748736 struct ub_randstate* rnd, int use_caps_for_id, int* availports,
749737 int numavailports, size_t unwanted_threshold, int tcp_mss,
750738 void (*unwanted_action)(void*), void* unwanted_param, int do_udp,
751 void* sslctx, int delayclose, struct dt_env* dtenv)
739 void* sslctx, int delayclose, int tls_use_sni, struct dt_env* dtenv)
752740 {
753741 struct outside_network* outnet = (struct outside_network*)
754742 calloc(1, sizeof(struct outside_network));
764752 outnet->infra = infra;
765753 outnet->rnd = rnd;
766754 outnet->sslctx = sslctx;
755 outnet->tls_use_sni = tls_use_sni;
767756 #ifdef USE_DNSTAP
768757 outnet->dtenv = dtenv;
769758 #else
777766 outnet->use_caps_for_id = use_caps_for_id;
778767 outnet->do_udp = do_udp;
779768 outnet->tcp_mss = tcp_mss;
769 outnet->ip_dscp = dscp;
780770 #ifndef S_SPLINT_S
781771 if(delayclose) {
782772 outnet->delayclose = 1;
954944 comm_point_delete(pc->cp);
955945 free(pc);
956946 }
947 #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
957948 free(outnet->ip4_ifs[i].avail_ports);
949 #endif
958950 free(outnet->ip4_ifs[i].out);
959951 }
960952 free(outnet->ip4_ifs);
968960 comm_point_delete(pc->cp);
969961 free(pc);
970962 }
963 #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
971964 free(outnet->ip6_ifs[i].avail_ports);
965 #endif
972966 free(outnet->ip6_ifs[i].out);
973967 }
974968 free(outnet->ip6_ifs);
10581052 * @param port: port override for addr.
10591053 * @param inuse: if -1 is returned, this bool means the port was in use.
10601054 * @param rnd: random state (for address randomisation).
1055 * @param dscp: DSCP to use.
10611056 * @return fd or -1
10621057 */
10631058 static int
10641059 udp_sockport(struct sockaddr_storage* addr, socklen_t addrlen, int pfxlen,
1065 int port, int* inuse, struct ub_randstate* rnd)
1060 int port, int* inuse, struct ub_randstate* rnd, int dscp)
10661061 {
10671062 int fd, noproto;
10681063 if(addr_is_ip6(addr, addrlen)) {
10771072 }
10781073 fd = create_udp_sock(AF_INET6, SOCK_DGRAM,
10791074 (struct sockaddr*)&sa, addrlen, 1, inuse, &noproto,
1080 0, 0, 0, NULL, 0, freebind, 0);
1075 0, 0, 0, NULL, 0, freebind, 0, dscp);
10811076 } else {
10821077 struct sockaddr_in* sa = (struct sockaddr_in*)addr;
10831078 sa->sin_port = (in_port_t)htons((uint16_t)port);
10841079 fd = create_udp_sock(AF_INET, SOCK_DGRAM,
10851080 (struct sockaddr*)addr, addrlen, 1, inuse, &noproto,
1086 0, 0, 0, NULL, 0, 0, 0);
1081 0, 0, 0, NULL, 0, 0, 0, dscp);
10871082 }
10881083 return fd;
10891084 }
11321127 while(1) {
11331128 my_if = ub_random_max(outnet->rnd, num_if);
11341129 pif = &ifs[my_if];
1130 #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
11351131 my_port = ub_random_max(outnet->rnd, pif->avail_total);
11361132 if(my_port < pif->inuse) {
11371133 /* port already open */
11431139 /* try to open new port, if fails, loop to try again */
11441140 log_assert(pif->inuse < pif->maxout);
11451141 portno = pif->avail_ports[my_port - pif->inuse];
1142 #else
1143 my_port = portno = 0;
1144 #endif
11461145 fd = udp_sockport(&pif->addr, pif->addrlen, pif->pfxlen,
1147 portno, &inuse, outnet->rnd);
1146 portno, &inuse, outnet->rnd, outnet->ip_dscp);
11481147 if(fd == -1 && !inuse) {
11491148 /* nonrecoverable error making socket */
11501149 return 0;
11661165
11671166 /* grab port in interface */
11681167 pif->out[pif->inuse] = pend->pc;
1168 #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
11691169 pif->avail_ports[my_port - pif->inuse] =
11701170 pif->avail_ports[pif->avail_total-pif->inuse-1];
1171 #endif
11711172 pif->inuse++;
11721173 break;
11731174 }
21912192 {
21922193 struct sockaddr_storage* addr;
21932194 socklen_t addrlen;
2194 int i, try, pnum;
2195 int i, try, pnum, dscp;
21952196 struct port_if* pif;
21962197
21972198 /* create fd */
2199 dscp = outnet->ip_dscp;
21982200 for(try = 0; try<1000; try++) {
21992201 int port = 0;
22002202 int freebind = 0;
22242226 }
22252227 addr = &pif->addr;
22262228 addrlen = pif->addrlen;
2229 #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
22272230 pnum = ub_random_max(outnet->rnd, pif->avail_total);
22282231 if(pnum < pif->inuse) {
22292232 /* port already open */
22322235 /* unused ports in start part of array */
22332236 port = pif->avail_ports[pnum - pif->inuse];
22342237 }
2235
2238 #else
2239 pnum = port = 0;
2240 #endif
22362241 if(addr_is_ip6(to_addr, to_addrlen)) {
22372242 struct sockaddr_in6 sa = *(struct sockaddr_in6*)addr;
22382243 sa.sin6_port = (in_port_t)htons((uint16_t)port);
22392244 fd = create_udp_sock(AF_INET6, SOCK_DGRAM,
22402245 (struct sockaddr*)&sa, addrlen, 1, &inuse, &noproto,
2241 0, 0, 0, NULL, 0, freebind, 0);
2246 0, 0, 0, NULL, 0, freebind, 0, dscp);
22422247 } else {
22432248 struct sockaddr_in* sa = (struct sockaddr_in*)addr;
22442249 sa->sin_port = (in_port_t)htons((uint16_t)port);
22452250 fd = create_udp_sock(AF_INET, SOCK_DGRAM,
22462251 (struct sockaddr*)addr, addrlen, 1, &inuse, &noproto,
2247 0, 0, 0, NULL, 0, freebind, 0);
2252 0, 0, 0, NULL, 0, freebind, 0, dscp);
22482253 }
22492254 if(fd != -1) {
22502255 return fd;
22932298 #endif
22942299 cp->ssl_shake_state = comm_ssl_shake_write;
22952300 /* https verification */
2301 #ifdef HAVE_SSL
2302 if(outnet->tls_use_sni) {
2303 (void)SSL_set_tlsext_host_name(cp->ssl, host);
2304 }
2305 #endif
22962306 #ifdef HAVE_SSL_SET1_HOST
22972307 if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) {
22982308 /* because we set SSL_VERIFY_PEER, in netevent in
23152325 * set1_host like verification */
23162326 if((SSL_CTX_get_verify_mode(outnet->sslctx)&SSL_VERIFY_PEER)) {
23172327 X509_VERIFY_PARAM* param = SSL_get0_param(cp->ssl);
2328 # ifdef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
23182329 X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
2330 # endif
23192331 if(!X509_VERIFY_PARAM_set1_host(param, host, strlen(host))) {
23202332 log_err("X509_VERIFY_PARAM_set1_host failed");
23212333 return 0;
23342346 sldns_buffer* query, int timeout, int ssl, char* host)
23352347 {
23362348 struct comm_point* cp;
2337 int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss);
2349 int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss, outnet->ip_dscp);
23382350 if(fd == -1) {
23392351 return 0;
23402352 }
23962408 {
23972409 /* cp calls cb with err=NETEVENT_DONE when transfer is done */
23982410 struct comm_point* cp;
2399 int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss);
2411 int fd = outnet_get_tcp_fd(to_addr, to_addrlen, outnet->tcp_mss, outnet->ip_dscp);
24002412 if(fd == -1) {
24012413 return 0;
24022414 }
24542466 {
24552467 size_t s;
24562468 int i;
2457 s = sizeof(*pif) + sizeof(int)*pif->avail_total +
2469 s = sizeof(*pif) +
2470 #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
2471 sizeof(int)*pif->avail_total +
2472 #endif
24582473 sizeof(struct port_comm*)*pif->maxout;
24592474 for(i=0; i<pif->inuse; i++)
24602475 s += sizeof(*pif->out[i]) +
131131 struct ub_randstate* rnd;
132132 /** ssl context to create ssl wrapped TCP with DNS connections */
133133 void* sslctx;
134 /** if SNI will be used for TLS connections */
135 int tls_use_sni;
134136 #ifdef USE_DNSTAP
135137 /** dnstap environment */
136138 struct dt_env* dtenv;
137139 #endif
138140 /** maximum segment size of tcp socket */
139141 int tcp_mss;
142 /** IP_TOS socket option requested on the sockets */
143 int ip_dscp;
140144
141145 /**
142146 * Array of tcp pending used for outgoing TCP connections.
171175 * if 0, no randomisation. */
172176 int pfxlen;
173177
178 #ifndef DISABLE_EXPLICIT_PORT_RANDOMISATION
174179 /** the available ports array. These are unused.
175180 * Only the first total-inuse part is filled. */
176181 int* avail_ports;
177182 /** the total number of available ports (size of the array) */
178183 int avail_total;
184 #endif
179185
180186 /** array of the commpoints currently in use.
181187 * allocated for max number of fds, first part in use. */
398404 * @param do_ip4: service IP4.
399405 * @param do_ip6: service IP6.
400406 * @param num_tcp: number of outgoing tcp buffers to preallocate.
407 * @param dscp: DSCP to use.
401408 * @param infra: pointer to infra cached used for serviced queries.
402409 * @param rnd: stored to create random numbers for serviced queries.
403410 * @param use_caps_for_id: enable to use 0x20 bits to encode id randomness.
411418 * @param sslctx: context to create outgoing connections with (if enabled).
412419 * @param delayclose: if not 0, udp sockets are delayed before timeout closure.
413420 * msec to wait on timeouted udp sockets.
421 * @param tls_use_sni: if SNI is used for TLS connections.
414422 * @param dtenv: environment to send dnstap events with (if enabled).
415423 * @return: the new structure (with no pending answers) or NULL on error.
416424 */
417425 struct outside_network* outside_network_create(struct comm_base* base,
418426 size_t bufsize, size_t num_ports, char** ifs, int num_ifs,
419 int do_ip4, int do_ip6, size_t num_tcp, struct infra_cache* infra,
427 int do_ip4, int do_ip6, size_t num_tcp, int dscp, struct infra_cache* infra,
420428 struct ub_randstate* rnd, int use_caps_for_id, int* availports,
421429 int numavailports, size_t unwanted_threshold, int tcp_mss,
422430 void (*unwanted_action)(void*), void* unwanted_param, int do_udp,
423 void* sslctx, int delayclose, struct dt_env *dtenv);
431 void* sslctx, int delayclose, int tls_use_sni, struct dt_env *dtenv);
424432
425433 /**
426434 * Delete outside_network structure.
539547
540548 /** get TCP file descriptor for address, returns -1 on failure,
541549 * tcp_mss is 0 or maxseg size to set for TCP packets. */
542 int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss);
550 int outnet_get_tcp_fd(struct sockaddr_storage* addr, socklen_t addrlen, int tcp_mss, int dscp);
543551
544552 /**
545553 * Create udp commpoint suitable for sending packets to the destination.
585585 }
586586
587587 int
588 rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname,
588 rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname,
589589 size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl,
590590 uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len)
591591 {
595595 enum rpz_action a;
596596 uint8_t* policydname;
597597
598 if(!dname_subdomain_c(dname, azname)) {
599 log_err("RPZ: name of record to insert into RPZ is not a "
600 "subdomain of the configured name of the RPZ zone");
601 return 0;
602 }
603
598604 log_assert(dnamelen >= aznamelen);
599 if(!(policydname = calloc(1, (dnamelen-aznamelen)+1)))
600 return 0;
605 if(!(policydname = calloc(1, (dnamelen-aznamelen)+1))) {
606 log_err("malloc error while inserting RPZ RR");
607 return 0;
608 }
601609
602610 a = rpz_rr_to_action(rr_type, rdatawl, rdatalen);
603611 if(!(policydnamelen = strip_dname_origin(dname, dnamelen, aznamelen,
825833 delete_zone = rpz_data_delete_rr(z, dname,
826834 dnamelen, rr_type, rdatawl, rdatalen);
827835 else if(a != localzone_type_to_rpz_action(z->type)) {
836 lock_rw_unlock(&z->lock);
837 lock_rw_unlock(&r->local_zones->lock);
828838 return;
829839 }
830840 lock_rw_unlock(&z->lock);
930940 struct regional* temp, struct comm_reply* repinfo,
931941 uint8_t* taglist, size_t taglen, struct ub_server_stats* stats)
932942 {
933 struct rpz* r;
943 struct rpz* r = NULL;
944 struct auth_zone* a;
934945 int ret;
935946 enum localzone_type lzt;
936947 struct local_zone* z = NULL;
937948 struct local_data* ld = NULL;
938949 lock_rw_rdlock(&az->rpz_lock);
939 for(r = az->rpz_first; r; r = r->next) {
950 for(a = az->rpz_first; a; a = a->rpz_az_next) {
951 lock_rw_rdlock(&a->lock);
952 r = a->rpz;
940953 if(!r->taglist || taglist_intersect(r->taglist,
941954 r->taglistlen, taglist, taglen)) {
942955 z = rpz_find_zone(r, qinfo->qname, qinfo->qname_len,
954967 }
955968 if(z)
956969 break;
957 }
970 }
971 lock_rw_unlock(&a->lock); /* not found in this auth_zone */
958972 }
959973 lock_rw_unlock(&az->rpz_lock);
960974 if(!z)
961 return 0;
962
963
975 return 0; /* not holding auth_zone.lock anymore */
976
977 log_assert(r);
964978 if(r->action_override == RPZ_NO_OVERRIDE_ACTION)
965979 lzt = z->type;
966980 else
971985 regional_alloc_zero(temp, sizeof(struct local_rrset));
972986 if(!qinfo->local_alias) {
973987 lock_rw_unlock(&z->lock);
988 lock_rw_unlock(&a->lock);
974989 return 0; /* out of memory */
975990 }
976991 qinfo->local_alias->rrset =
978993 sizeof(*r->cname_override));
979994 if(!qinfo->local_alias->rrset) {
980995 lock_rw_unlock(&z->lock);
996 lock_rw_unlock(&a->lock);
981997 return 0; /* out of memory */
982998 }
983999 qinfo->local_alias->rrset->rk.dname = qinfo->qname;
9871003 qinfo, repinfo, r->log_name);
9881004 stats->rpz_action[RPZ_CNAME_OVERRIDE_ACTION]++;
9891005 lock_rw_unlock(&z->lock);
1006 lock_rw_unlock(&a->lock);
9901007 return 0;
9911008 }
9921009
9991016 repinfo, r->log_name);
10001017 stats->rpz_action[localzone_type_to_rpz_action(lzt)]++;
10011018 lock_rw_unlock(&z->lock);
1019 lock_rw_unlock(&a->lock);
10021020 return !qinfo->local_alias;
10031021 }
10041022
10091027 qinfo, repinfo, r->log_name);
10101028 stats->rpz_action[localzone_type_to_rpz_action(lzt)]++;
10111029 lock_rw_unlock(&z->lock);
1030 lock_rw_unlock(&a->lock);
10121031
10131032 return ret;
10141033 }
8585 /**
8686 * RPZ containing policies. Pointed to from corresponding auth-zone. Part of a
8787 * linked list to keep configuration order. Iterating or changing the linked
88 * list requires the rpz_lock from struct auth_zones.
88 * list requires the rpz_lock from struct auth_zones. Changing items in this
89 * struct require the lock from struct auth_zone.
8990 */
9091 struct rpz {
9192 struct local_zones* local_zones;
9697 struct ub_packed_rrset_key* cname_override;
9798 int log;
9899 char* log_name;
99 struct rpz* next;
100 struct rpz* prev;
101100 struct regional* region;
102101 };
103102
104103 /**
105104 * Create policy from RR and add to this RPZ.
106105 * @param r: the rpz to add the policy to.
106 * @param azname: dname of the auth-zone
107107 * @param aznamelen: the length of the auth-zone name
108108 * @param dname: dname of the RR
109109 * @param dnamelen: length of the dname
116116 * @param rr_len: the length of the complete RR
117117 * @return: 0 on error
118118 */
119 int rpz_insert_rr(struct rpz* r, size_t aznamelen, uint8_t* dname,
119 int rpz_insert_rr(struct rpz* r, uint8_t* azname, size_t aznamelen, uint8_t* dname,
120120 size_t dnamelen, uint16_t rr_type, uint16_t rr_class, uint32_t rr_ttl,
121121 uint8_t* rdatawl, size_t rdatalen, uint8_t* rr, size_t rr_len);
122122
166166 static int64_t
167167 sldns_serial_arithmetics_time(int32_t time, time_t now)
168168 {
169 int32_t offset = time - (int32_t) now;
169 int32_t offset = (int32_t)((uint32_t) time - (uint32_t) now);
170170 return (int64_t) now + offset;
171171 }
172172
186186 printf("-c file cert file, default %s\n", ROOT_CERT_FILE);
187187 printf("-l list builtin key and cert on stdout\n");
188188 printf("-u name server in https url, default %s\n", URLNAME);
189 printf("-S do not use SNI for the https connection\n");
189190 printf("-x path pathname to xml in url, default %s\n", XMLNAME);
190191 printf("-s path pathname to p7s in url, default %s\n", P7SNAME);
191192 printf("-n name signer's subject emailAddress, default %s\n", P7SIGNER);
244245 return
245246 /* The anchors must start on a new line with ". IN DS and end with \n"[;]
246247 * because the makedist script greps on the source here */
247 /* anchor 19036 is from 2010 */
248248 /* anchor 20326 is from 2017 */
249 ". IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5\n"
250249 ". IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D\n";
251250 }
252251
771770
772771 /** initiate TLS on a connection */
773772 static SSL*
774 TLS_initiate(SSL_CTX* sslctx, int fd)
773 TLS_initiate(SSL_CTX* sslctx, int fd, const char* urlname, int use_sni)
775774 {
776775 X509* x;
777776 int r;
786785 if(verb) printf("SSL_set_fd error\n");
787786 SSL_free(ssl);
788787 return NULL;
788 }
789 if(use_sni) {
790 (void)SSL_set_tlsext_host_name(ssl, urlname);
789791 }
790792 while(1) {
791793 ERR_clear_error();
11221124 /** https to an IP addr, return BIO with pathname or NULL */
11231125 static BIO*
11241126 https_to_ip(struct ip_list* ip, const char* pathname, const char* urlname,
1125 struct ip_list* src)
1127 struct ip_list* src, int use_sni)
11261128 {
11271129 int fd;
11281130 SSL* ssl;
11361138 SSL_CTX_free(sslctx);
11371139 return NULL;
11381140 }
1139 ssl = TLS_initiate(sslctx, fd);
1141 ssl = TLS_initiate(sslctx, fd, urlname, use_sni);
11401142 if(!ssl) {
11411143 SSL_CTX_free(sslctx);
11421144 fd_close(fd);
11601162 * @param pathname: pathname of file on server to GET.
11611163 * @param urlname: name to pass as the virtual host for this request.
11621164 * @param src: if nonNULL, source address to bind to.
1165 * @param use_sni: if SNI will be used.
11631166 * @return a memory BIO with the file in it.
11641167 */
11651168 static BIO*
11661169 https(struct ip_list* ip_list, const char* pathname, const char* urlname,
1167 struct ip_list* src)
1170 struct ip_list* src, int use_sni)
11681171 {
11691172 struct ip_list* ip;
11701173 BIO* bio = NULL;
11721175 wipe_ip_usage(ip_list);
11731176 while( (ip = pick_random_ip(ip_list)) ) {
11741177 ip->used = 1;
1175 bio = https_to_ip(ip, pathname, urlname, src);
1178 bio = https_to_ip(ip, pathname, urlname, src, use_sni);
11761179 if(bio) break;
11771180 }
11781181 if(!bio) {
19281931 const char* urlname, const char* xmlname, const char* p7sname,
19291932 const char* p7signer, const char* res_conf, const char* root_hints,
19301933 const char* debugconf, const char* srcaddr, int ip4only, int ip6only,
1931 int port)
1934 int port, int use_sni)
19321935
19331936 {
19341937 STACK_OF(X509)* cert;
19621965 #endif
19631966
19641967 /* fetch the necessary files over HTTPS */
1965 xml = https(ip_list, xmlname, urlname, src);
1966 p7s = https(ip_list, p7sname, urlname, src);
1968 xml = https(ip_list, xmlname, urlname, src, use_sni);
1969 p7s = https(ip_list, p7sname, urlname, src, use_sni);
19671970
19681971 /* verify and update the root anchor */
19691972 verify_and_update_anchor(root_anchor_file, xml, p7s, cert, p7signer);
22342237 const char* urlname, const char* xmlname, const char* p7sname,
22352238 const char* p7signer, const char* res_conf, const char* root_hints,
22362239 const char* debugconf, const char* srcaddr, int ip4only, int ip6only,
2237 int force, int res_conf_fallback, int port)
2240 int force, int res_conf_fallback, int port, int use_sni)
22382241 {
22392242 struct ub_result* dnskey;
22402243 int used_builtin = 0;
22772280 probe_date_allows_certupdate(root_anchor_file)) || force) {
22782281 if(do_certupdate(root_anchor_file, root_cert_file, urlname,
22792282 xmlname, p7sname, p7signer, res_conf, root_hints,
2280 debugconf, srcaddr, ip4only, ip6only, port))
2283 debugconf, srcaddr, ip4only, ip6only, port, use_sni))
22812284 return 1;
22822285 return used_builtin;
22832286 }
23062309 const char* srcaddr = NULL;
23072310 int dolist=0, ip4only=0, ip6only=0, force=0, port = HTTPS_PORT;
23082311 int res_conf_fallback = 0;
2312 int use_sni = 1;
23092313 /* parse the options */
2310 while( (c=getopt(argc, argv, "46C:FRP:a:b:c:f:hln:r:s:u:vx:")) != -1) {
2314 while( (c=getopt(argc, argv, "46C:FRSP:a:b:c:f:hln:r:s:u:vx:")) != -1) {
23112315 switch(c) {
23122316 case 'l':
23132317 dolist = 1;
23292333 break;
23302334 case 'u':
23312335 urlname = optarg;
2336 break;
2337 case 'S':
2338 use_sni = 0;
23322339 break;
23332340 case 'x':
23342341 xmlname = optarg;
23962403
23972404 return do_root_update_work(root_anchor_file, root_cert_file, urlname,
23982405 xmlname, p7sname, p7signer, res_conf, root_hints, debugconf,
2399 srcaddr, ip4only, ip6only, force, res_conf_fallback, port);
2400 }
2406 srcaddr, ip4only, ip6only, force, res_conf_fallback, port, use_sni);
2407 }
5757 #include "services/authzone.h"
5858 #include "respip/respip.h"
5959 #include "sldns/sbuffer.h"
60 #include "sldns/str2wire.h"
6061 #ifdef HAVE_GETOPT_H
6162 #include <getopt.h>
6263 #endif
191192 if(!local_zones_apply_cfg(zs, cfg))
192193 fatal_exit("failed local-zone, local-data configuration");
193194 local_zones_delete(zs);
195 }
196
197 /** checks for acl and views */
198 static void
199 acl_view_tag_checks(struct config_file* cfg, struct views* views)
200 {
201 int d;
202 struct sockaddr_storage a;
203 socklen_t alen;
204 struct config_str2list* acl;
205 struct config_str3list* s3;
206 struct config_strbytelist* sb;
207
208 /* acl_view */
209 for(acl=cfg->acl_view; acl; acl = acl->next) {
210 struct view* v;
211 if(!netblockstrtoaddr(acl->str, UNBOUND_DNS_PORT, &a, &alen,
212 &d)) {
213 fatal_exit("cannot parse access-control-view "
214 "address %s %s", acl->str, acl->str2);
215 }
216 v = views_find_view(views, acl->str2, 0);
217 if(!v) {
218 fatal_exit("cannot find view for "
219 "access-control-view: %s %s",
220 acl->str, acl->str2);
221 }
222 lock_rw_unlock(&v->lock);
223 }
224
225 /* acl_tags */
226 for(sb=cfg->acl_tags; sb; sb = sb->next) {
227 if(!netblockstrtoaddr(sb->str, UNBOUND_DNS_PORT, &a, &alen,
228 &d)) {
229 fatal_exit("cannot parse access-control-tags "
230 "address %s", sb->str);
231 }
232 }
233
234 /* acl_tag_actions */
235 for(s3=cfg->acl_tag_actions; s3; s3 = s3->next) {
236 enum localzone_type t;
237 if(!netblockstrtoaddr(s3->str, UNBOUND_DNS_PORT, &a, &alen,
238 &d)) {
239 fatal_exit("cannot parse access-control-tag-actions "
240 "address %s %s %s",
241 s3->str, s3->str2, s3->str3);
242 }
243 if(find_tag_id(cfg, s3->str2) == -1) {
244 fatal_exit("cannot parse tag %s (define-tag it), "
245 "for access-control-tag-actions: %s %s %s",
246 s3->str2, s3->str, s3->str2, s3->str3);
247 }
248 if(!local_zone_str2type(s3->str3, &t)) {
249 fatal_exit("cannot parse access control action type %s"
250 " for access-control-tag-actions: %s %s %s",
251 s3->str3, s3->str, s3->str2, s3->str3);
252 }
253 }
254
255 /* acl_tag_datas */
256 for(s3=cfg->acl_tag_datas; s3; s3 = s3->next) {
257 char buf[65536];
258 uint8_t rr[LDNS_RR_BUF_SIZE];
259 size_t len = sizeof(rr);
260 int res;
261 if(!netblockstrtoaddr(s3->str, UNBOUND_DNS_PORT, &a, &alen,
262 &d)) {
263 fatal_exit("cannot parse access-control-tag-datas address %s %s '%s'",
264 s3->str, s3->str2, s3->str3);
265 }
266 if(find_tag_id(cfg, s3->str2) == -1) {
267 fatal_exit("cannot parse tag %s (define-tag it), "
268 "for access-control-tag-datas: %s %s '%s'",
269 s3->str2, s3->str, s3->str2, s3->str3);
270 }
271 /* '.' is sufficient for validation, and it makes the call to
272 * sldns_wirerr_get_type() simpler below. */
273 snprintf(buf, sizeof(buf), "%s %s", ".", s3->str3);
274 res = sldns_str2wire_rr_buf(buf, rr, &len, NULL, 3600, NULL,
275 0, NULL, 0);
276 if(res != 0) {
277 fatal_exit("cannot parse rr data [char %d] parse error %s, for access-control-tag-datas: %s %s '%s'",
278 (int)LDNS_WIREPARSE_OFFSET(res)-2,
279 sldns_get_errorstr_parse(res),
280 s3->str, s3->str2, s3->str3);
281 }
282 }
194283 }
195284
196285 /** check view and response-ip configuration */
210299 fatal_exit("Could not setup respip set");
211300 if(!respip_views_apply_cfg(views, cfg, &ignored))
212301 fatal_exit("Could not setup per-view respip sets");
302 acl_view_tag_checks(cfg, views);
213303 views_delete(views);
214304 respip_set_delete(respip);
215305 }
480570 fatal_exit("num_threads value weird");
481571 if(!cfg->do_ip4 && !cfg->do_ip6)
482572 fatal_exit("ip4 and ip6 are both disabled, pointless");
573 if(!cfg->do_ip4 && cfg->prefer_ip4)
574 fatal_exit("cannot prefer and disable ip4, pointless");
483575 if(!cfg->do_ip6 && cfg->prefer_ip6)
484576 fatal_exit("cannot prefer and disable ip6, pointless");
485577 if(!cfg->do_udp && !cfg->do_tcp)
566658 && strcmp(cfg->module_conf, "python dns64 iterator") != 0
567659 && strcmp(cfg->module_conf, "python dns64 validator iterator") != 0
568660 #endif
661 #ifdef WITH_DYNLIBMODULE
662 && strcmp(cfg->module_conf, "dynlib iterator") != 0
663 && strcmp(cfg->module_conf, "dynlib dynlib iterator") != 0
664 && strcmp(cfg->module_conf, "dynlib dynlib dynlib iterator") != 0
665 && strcmp(cfg->module_conf, "python dynlib iterator") != 0
666 && strcmp(cfg->module_conf, "python dynlib dynlib iterator") != 0
667 && strcmp(cfg->module_conf, "python dynlib dynlib dynlib iterator") != 0
668 && strcmp(cfg->module_conf, "dynlib respip iterator") != 0
669 && strcmp(cfg->module_conf, "dynlib validator iterator") != 0
670 && strcmp(cfg->module_conf, "dynlib dynlib validator iterator") != 0
671 && strcmp(cfg->module_conf, "dynlib dynlib dynlib validator iterator") != 0
672 && strcmp(cfg->module_conf, "python dynlib validator iterator") != 0
673 && strcmp(cfg->module_conf, "python dynlib dynlib validator iterator") != 0
674 && strcmp(cfg->module_conf, "python dynlib dynlib dynlib validator iterator") != 0
675 && strcmp(cfg->module_conf, "dynlib respip validator iterator") != 0
676 && strcmp(cfg->module_conf, "validator dynlib iterator") != 0
677 && strcmp(cfg->module_conf, "dns64 dynlib iterator") != 0
678 && strcmp(cfg->module_conf, "dns64 dynlib validator iterator") != 0
679 && strcmp(cfg->module_conf, "dns64 validator dynlib iterator") != 0
680 && strcmp(cfg->module_conf, "dynlib dns64 iterator") != 0
681 && strcmp(cfg->module_conf, "dynlib dns64 validator iterator") != 0
682 && strcmp(cfg->module_conf, "dynlib dns64 cachedb iterator") != 0
683 && strcmp(cfg->module_conf, "dynlib dns64 validator cachedb iterator") != 0
684 && strcmp(cfg->module_conf, "dns64 dynlib cachedb iterator") != 0
685 && strcmp(cfg->module_conf, "dns64 dynlib validator cachedb iterator") != 0
686 && strcmp(cfg->module_conf, "dynlib cachedb iterator") != 0
687 && strcmp(cfg->module_conf, "dynlib respip cachedb iterator") != 0
688 && strcmp(cfg->module_conf, "dynlib validator cachedb iterator") != 0
689 && strcmp(cfg->module_conf, "dynlib respip validator cachedb iterator") != 0
690 && strcmp(cfg->module_conf, "cachedb dynlib iterator") != 0
691 && strcmp(cfg->module_conf, "respip cachedb dynlib iterator") != 0
692 && strcmp(cfg->module_conf, "validator cachedb dynlib iterator") != 0
693 && strcmp(cfg->module_conf, "respip validator cachedb dynlib iterator") != 0
694 && strcmp(cfg->module_conf, "validator dynlib cachedb iterator") != 0
695 && strcmp(cfg->module_conf, "respip validator dynlib cachedb iterator") != 0
696 && strcmp(cfg->module_conf, "dynlib subnetcache iterator") != 0
697 && strcmp(cfg->module_conf, "dynlib respip subnetcache iterator") != 0
698 && strcmp(cfg->module_conf, "subnetcache dynlib iterator") != 0
699 && strcmp(cfg->module_conf, "respip subnetcache dynlib iterator") != 0
700 && strcmp(cfg->module_conf, "dynlib subnetcache validator iterator") != 0
701 && strcmp(cfg->module_conf, "dynlib respip subnetcache validator iterator") != 0
702 && strcmp(cfg->module_conf, "subnetcache dynlib validator iterator") != 0
703 && strcmp(cfg->module_conf, "respip subnetcache dynlib validator iterator") != 0
704 && strcmp(cfg->module_conf, "subnetcache validator dynlib iterator") != 0
705 && strcmp(cfg->module_conf, "respip subnetcache validator dynlib iterator") != 0
706 && strcmp(cfg->module_conf, "dynlib ipsecmod iterator") != 0
707 && strcmp(cfg->module_conf, "dynlib ipsecmod respip iterator") != 0
708 && strcmp(cfg->module_conf, "ipsecmod dynlib iterator") != 0
709 && strcmp(cfg->module_conf, "ipsecmod dynlib respip iterator") != 0
710 && strcmp(cfg->module_conf, "ipsecmod validator iterator") != 0
711 && strcmp(cfg->module_conf, "ipsecmod respip validator iterator") != 0
712 && strcmp(cfg->module_conf, "dynlib ipsecmod validator iterator") != 0
713 && strcmp(cfg->module_conf, "dynlib ipsecmod respip validator iterator") != 0
714 && strcmp(cfg->module_conf, "ipsecmod dynlib validator iterator") != 0
715 && strcmp(cfg->module_conf, "ipsecmod dynlib respip validator iterator") != 0
716 && strcmp(cfg->module_conf, "ipsecmod validator dynlib iterator") != 0
717 && strcmp(cfg->module_conf, "ipsecmod respip validator dynlib iterator") != 0
718 #endif
569719 #ifdef USE_CACHEDB
570720 && strcmp(cfg->module_conf, "validator cachedb iterator") != 0
571721 && strcmp(cfg->module_conf, "respip validator cachedb iterator") != 0
597747 && strcmp(cfg->module_conf, "respip subnetcache validator iterator") != 0
598748 && strcmp(cfg->module_conf, "dns64 subnetcache iterator") != 0
599749 && strcmp(cfg->module_conf, "dns64 subnetcache validator iterator") != 0
750 && strcmp(cfg->module_conf, "dns64 subnetcache respip iterator") != 0
751 && strcmp(cfg->module_conf, "dns64 subnetcache respip validator iterator") != 0
600752 #endif
601753 #if defined(WITH_PYTHONMODULE) && defined(CLIENT_SUBNET)
602754 && strcmp(cfg->module_conf, "python subnetcache iterator") != 0
700852 {
701853 int is_rpz = 0;
702854 struct auth_zones* az = auth_zones_create();
703 if(!az || !auth_zones_apply_cfg(az, cfg, 0i, &is_rpz)) {
855 if(!az || !auth_zones_apply_cfg(az, cfg, 0, &is_rpz)) {
704856 fatal_exit("Could not setup authority zones");
705857 }
706858 auth_zones_delete(az);
44 # Copyright (c) 2008, NLnet Labs. All rights reserved.
55 #
66 # This software is open source.
7 #
7 #
88 # Redistribution and use in source and binary forms, with or without
99 # modification, are permitted provided that the following conditions
1010 # are met:
11 #
11 #
1212 # Redistributions of source code must retain the above copyright notice,
1313 # this list of conditions and the following disclaimer.
14 #
14 #
1515 # Redistributions in binary form must reproduce the above copyright notice,
1616 # this list of conditions and the following disclaimer in the documentation
1717 # and/or other materials provided with the distribution.
18 #
18 #
1919 # Neither the name of the NLNET LABS nor the names of its contributors may
2020 # be used to endorse or promote products derived from this software without
2121 # specific prior written permission.
22 #
22 #
2323 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2424 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2525 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
5656 # base name for unbound-control keys
5757 CTL_BASE=unbound_control
5858
59 # flag to recreate generated certificates
60 RECREATE=0
61
5962 # we want -rw-r----- access (say you run this as root: grp=yes (server), all=no).
6063 umask 0027
6164
6265 # end of options
6366
64 # functions:
65 error ( ) {
66 echo "$0 fatal error: $1"
67 exit 1
67 set -eu
68
69 cleanup() {
70 echo "removing artifacts"
71
72 rm -rf \
73 server.cnf \
74 client.cnf \
75 "${SVR_BASE}_trust.pem" \
76 "${CTL_BASE}_trust.pem" \
77 "${SVR_BASE}_trust.srl"
6878 }
6979
70 # check arguments:
71 while test $# -ne 0; do
72 case $1 in
73 -d)
74 if test $# -eq 1; then error "need argument for -d"; fi
75 DESTDIR="$2"
76 shift
77 ;;
78 *)
79 echo "unbound-control-setup.sh - setup SSL keys for unbound-control"
80 echo " -d dir use directory to store keys and certificates."
81 echo " default: $DESTDIR"
82 echo "please run this command using the same user id that the "
83 echo "unbound daemon uses, it needs read privileges."
84 exit 1
85 ;;
86 esac
87 shift
80 fatal() {
81 printf "fatal error: $*\n" >/dev/stderr
82 exit 1
83 }
84
85 usage() {
86 cat <<EOF
87 usage: $0 OPTIONS
88 OPTIONS
89 -d <dir> used directory to store keys and certificates (default: $DESTDIR)
90 -h show help notice
91 -r recreate certificates
92 EOF
93 }
94
95 OPTIND=1
96 while getopts 'd:hr' arg; do
97 case "$arg" in
98 d) DESTDIR="$OPTARG" ;;
99 h) usage; exit 1 ;;
100 r) RECREATE=1 ;;
101 ?) fatal "'$arg' unknown option" ;;
102 esac
88103 done
89
90 # go!:
104 shift $((OPTIND - 1))
105
106
91107 echo "setup in directory $DESTDIR"
92 cd "$DESTDIR" || error "could not cd to $DESTDIR"
93
94 # create certificate keys; do not recreate if they already exist.
95 if test -f $SVR_BASE.key; then
96 echo "$SVR_BASE.key exists"
97 else
98 echo "generating $SVR_BASE.key"
99 openssl genrsa -out $SVR_BASE.key $BITS || error "could not genrsa"
100 fi
101 if test -f $CTL_BASE.key; then
102 echo "$CTL_BASE.key exists"
103 else
104 echo "generating $CTL_BASE.key"
105 openssl genrsa -out $CTL_BASE.key $BITS || error "could not genrsa"
106 fi
107
108 # create self-signed cert for server
109 echo "[req]" > request.cfg
110 echo "default_bits=$BITS" >> request.cfg
111 echo "default_md=$HASH" >> request.cfg
112 echo "prompt=no" >> request.cfg
113 echo "distinguished_name=req_distinguished_name" >> request.cfg
114 echo "" >> request.cfg
115 echo "[req_distinguished_name]" >> request.cfg
116 echo "commonName=$SERVERNAME" >> request.cfg
117
118 test -f request.cfg || error "could not create request.cfg"
119
120 echo "create $SVR_BASE.pem (self signed certificate)"
121 openssl req -key $SVR_BASE.key -config request.cfg -new -x509 -days $DAYS -out $SVR_BASE.pem || error "could not create $SVR_BASE.pem"
122 # create trusted usage pem
123 openssl x509 -in $SVR_BASE.pem -addtrust serverAuth -out $SVR_BASE"_trust.pem"
124
125 # create client request and sign it, piped
126 echo "[req]" > request.cfg
127 echo "default_bits=$BITS" >> request.cfg
128 echo "default_md=$HASH" >> request.cfg
129 echo "prompt=no" >> request.cfg
130 echo "distinguished_name=req_distinguished_name" >> request.cfg
131 echo "" >> request.cfg
132 echo "[req_distinguished_name]" >> request.cfg
133 echo "commonName=$CLIENTNAME" >> request.cfg
134
135 test -f request.cfg || error "could not create request.cfg"
136
137 echo "create $CTL_BASE.pem (signed client certificate)"
138 openssl req -key $CTL_BASE.key -config request.cfg -new | openssl x509 -req -days $DAYS -CA $SVR_BASE"_trust.pem" -CAkey $SVR_BASE.key -CAcreateserial -$HASH -out $CTL_BASE.pem
139 test -f $CTL_BASE.pem || error "could not create $CTL_BASE.pem"
108 cd "$DESTDIR"
109
110 trap cleanup INT
111
112 # ===
113 # Generate server certificate
114 # ===
115
116 # generate private key; do no recreate it if they already exist.
117 if [ ! -f "$SVR_BASE.key" ]; then
118 openssl genrsa -out "$SVR_BASE.key" "$BITS"
119 fi
120
121 cat >server.cnf <<EOF
122 default_bits=$BITS
123 default_md=$HASH
124 prompt=no
125 distinguished_name=req_distinguished_name
126 [req_distinguished_name]
127 commonName=$SERVERNAME
128 EOF
129
130 [ -f server.cnf ] || fatal "cannot create openssl configuration"
131
132 if [ ! -f "$SVR_BASE.pem" -o $RECREATE -eq 1 ]; then
133 openssl req \
134 -new -x509 \
135 -key "$SVR_BASE.key" \
136 -config server.cnf \
137 -days "$DAYS" \
138 -out "$SVR_BASE.pem"
139
140 [ ! -f "SVR_BASE.pem" ] || fatal "cannot create server certificate"
141 fi
142
143 # ===
144 # Generate client certificate
145 # ===
146
147 # generate private key; do no recreate it if they already exist.
148 if [ ! -f "$CTL_BASE.key" ]; then
149 openssl genrsa -out "$CTL_BASE.key" "$BITS"
150 fi
151
152 cat >client.cnf <<EOF
153 [req]
154 default_bits=$BITS
155 default_md=$HASH
156 prompt=no
157 distinguished_name=req_distinguished_name
158 [req_distinguished_name]
159 commonName=$CLIENTNAME
160 EOF
161
162 [ -f client.cnf ] || fatal "cannot create openssl configuration"
163
164 if [ ! -f "$CTL_BASE.pem" -o $RECREATE -eq 1 ]; then
165 openssl x509 \
166 -addtrust serverAuth \
167 -in "$SVR_BASE.pem" \
168 -out "${SVR_BASE}_trust.pem"
169
170 openssl req \
171 -new \
172 -config client.cnf \
173 -key "$CTL_BASE.key" \
174 | openssl x509 \
175 -req \
176 -days "$DAYS" \
177 -CA "${SVR_BASE}_trust.pem" \
178 -CAkey "$SVR_BASE.key" \
179 -CAcreateserial \
180 -$HASH \
181 -out "$CTL_BASE.pem"
182
183 [ ! -f "CTL_BASE.pem" ] || fatal "cannot create signed client certificate"
184 fi
185
186 # remove unused permissions
187 chmod o-rw \
188 "$SVR_BASE.pem" \
189 "$SVR_BASE.key" \
190 "$CTL_BASE.pem" \
191 "$CTL_BASE.key"
192
193 cleanup
194
195 echo "Setup success. Certificates created. Enable in unbound.conf file to use"
196
140197 # create trusted usage pem
141198 # openssl x509 -in $CTL_BASE.pem -addtrust clientAuth -out $CTL_BASE"_trust.pem"
142199
147204 # echo "empty password is used, simply click OK on the password dialog box."
148205 # openssl pkcs12 -export -in $CTL_BASE"_trust.pem" -inkey $CTL_BASE.key -name "unbound remote control client cert" -out $CTL_BASE"_browser.pfx" -password "pass:" || error "could not create browser certificate"
149206
150 # set desired permissions
151 chmod 0640 $SVR_BASE.pem $SVR_BASE.key $CTL_BASE.pem $CTL_BASE.key
152
153 # remove crap
154 rm -f request.cfg
155 rm -f $CTL_BASE"_trust.pem" $SVR_BASE"_trust.pem" $SVR_BASE"_trust.srl"
156
157 echo "Setup success. Certificates created. Enable in unbound.conf file to use"
158
159 exit 0
7171 #endif
7272 #ifdef HAVE_SYS_UN_H
7373 #include <sys/un.h>
74 #endif
75
76 #ifdef HAVE_TARGETCONDITIONALS_H
77 #include <TargetConditionals.h>
7478 #endif
7579
7680 static void usage(void) ATTR_NORETURN;
263267 #ifdef USE_IPSECMOD
264268 PR_LL("mem.mod.ipsecmod", shm_stat->mem.ipsecmod);
265269 #endif
270 #ifdef WITH_DYNLIBMODULE
271 PR_LL("mem.mod.dynlib", shm_stat->mem.dynlib);
272 #endif
266273 #ifdef USE_DNSCRYPT
267274 PR_LL("mem.cache.dnscrypt_shared_secret",
268275 shm_stat->mem.dnscrypt_shared_secret);
878885 if(argc == 0)
879886 usage();
880887 if(argc >= 1 && strcmp(argv[0], "start")==0) {
888 #if defined(TARGET_OS_TV) || defined(TARGET_OS_WATCH)
889 fatal_exit("could not exec unbound: %s",
890 strerror(ENOSYS));
891 #else
881892 if(execlp("unbound", "unbound", "-c", cfgfile,
882893 (char*)NULL) < 0) {
883894 fatal_exit("could not exec unbound: %s",
884895 strerror(errno));
885896 }
897 #endif
886898 }
887899 if(argc >= 1 && strcmp(argv[0], "stats_shm")==0) {
888900 print_stats_shm(cfgfile);
247247 {
248248 log_assert(0);
249249 }
250
251 #ifdef USE_DNSTAP
252 void dtio_tap_callback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev),
253 void* ATTR_UNUSED(arg))
254 {
255 log_assert(0);
256 }
257 #endif
258
259 #ifdef USE_DNSTAP
260 void dtio_mainfdcallback(int ATTR_UNUSED(fd), short ATTR_UNUSED(ev),
261 void* ATTR_UNUSED(arg))
262 {
263 log_assert(0);
264 }
265 #endif
10301030 size_t ATTR_UNUSED(num_ports), char** ATTR_UNUSED(ifs),
10311031 int ATTR_UNUSED(num_ifs), int ATTR_UNUSED(do_ip4),
10321032 int ATTR_UNUSED(do_ip6), size_t ATTR_UNUSED(num_tcp),
1033 int ATTR_UNUSED(dscp),
10331034 struct infra_cache* infra,
10341035 struct ub_randstate* ATTR_UNUSED(rnd),
10351036 int ATTR_UNUSED(use_caps_for_id), int* ATTR_UNUSED(availports),
10371038 int ATTR_UNUSED(outgoing_tcp_mss),
10381039 void (*unwanted_action)(void*), void* ATTR_UNUSED(unwanted_param),
10391040 int ATTR_UNUSED(do_udp), void* ATTR_UNUSED(sslctx),
1040 int ATTR_UNUSED(delayclose), struct dt_env* ATTR_UNUSED(dtenv))
1041 int ATTR_UNUSED(delayclose), int ATTR_UNUSED(tls_use_sni),
1042 struct dt_env* ATTR_UNUSED(dtenv))
10411043 {
10421044 struct replay_runtime* runtime = (struct replay_runtime*)base;
10431045 struct outside_network* outnet = calloc(1,
15821584 int* ATTR_UNUSED(noproto), int ATTR_UNUSED(rcv), int ATTR_UNUSED(snd),
15831585 int ATTR_UNUSED(listen), int* ATTR_UNUSED(reuseport),
15841586 int ATTR_UNUSED(transparent), int ATTR_UNUSED(freebind),
1585 int ATTR_UNUSED(use_systemd))
1587 int ATTR_UNUSED(use_systemd), int ATTR_UNUSED(dscp))
15861588 {
15871589 /* if you actually print to this, it'll be stdout during test */
15881590 return 1;
17891791 }
17901792
17911793 int outnet_get_tcp_fd(struct sockaddr_storage* ATTR_UNUSED(addr),
1792 socklen_t ATTR_UNUSED(addrlen), int ATTR_UNUSED(tcp_mss))
1794 socklen_t ATTR_UNUSED(addrlen), int ATTR_UNUSED(tcp_mss), int ATTR_UNUSED(dscp))
17931795 {
17941796 log_assert(0);
17951797 return -1;
2525 TPKG=../testcode/mini_tdir.sh
2626 #RUNLIST=`(ls -1d *.tdir|grep -v '^0[016]')`
2727 RUNLIST=`(ls -1d *.tdir)`
28 if test "$#" = "1"; then RUNLIST="$1"; fi
28 if test "$#" = "1"; then
29 RUNLIST="$1";
30 if echo "$RUNLIST" | grep '/$' >/dev/null; then
31 RUNLIST=`echo "$RUNLIST" | sed -e 's?/$??'`
32 fi
33 fi
2934
3035 # fix up tdir that was edited on keyboard interrupt.
3136 cleanup() {
3237 echo cleanup
33 if test -f "$t.bak"; then mv "$t.bak" "$t"; fi
38 if test -f "$t.bak"; then rm -fr "${t}"; mv "$t.bak" "$t"; fi
3439 exit 0
3540 }
36 trap cleanup SIGINT
41 trap cleanup INT
3742
3843 for t in $RUNLIST
3944 do
199199 static void
200200 recv_one(int fd, int udp, SSL* ssl, sldns_buffer* buf)
201201 {
202 size_t i;
202203 char* pktstr;
203204 uint16_t len;
204205 if(!udp) {
269270 len = (size_t)l;
270271 }
271272 printf("\nnext received packet\n");
272 log_buf(0, "data", buf);
273 printf("data[%d] ", (int)sldns_buffer_limit(buf));
274 for(i=0; i<sldns_buffer_limit(buf); i++) {
275 const char* hex = "0123456789ABCDEF";
276 printf("%c%c", hex[(sldns_buffer_read_u8_at(buf, i)&0xf0)>>4],
277 hex[sldns_buffer_read_u8_at(buf, i)&0x0f]);
278 }
279 printf("\n");
273280
274281 pktstr = sldns_wire2str_pkt(sldns_buffer_begin(buf), len);
275282 printf("%s", pktstr);
576576 }
577577 #endif /* UB_ON_WINDOWS */
578578
579 int tcp_connect_errno_needs_log(struct sockaddr* ATTR_UNUSED(addr),
580 socklen_t ATTR_UNUSED(addrlen))
581 {
582 return 1;
583 }
584
585 int squelch_err_ssl_handshake(unsigned long ATTR_UNUSED(err))
586 {
587 return 0;
588 }
866866 printf("\tperforms unit tests.\n");
867867 return 1;
868868 }
869 /* Disable roundrobin for the unit tests */
870 RRSET_ROUNDROBIN = 0;
871 #ifdef USE_LIBEVENT
872 printf("Start of %s+libevent unit test.\n", PACKAGE_STRING);
873 #else
869874 printf("Start of %s unit test.\n", PACKAGE_STRING);
875 #endif
870876 #ifdef HAVE_SSL
871877 # ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS
872878 ERR_load_crypto_strings();
916922 # ifdef HAVE_EVP_CLEANUP
917923 EVP_cleanup();
918924 # endif
925 # if (OPENSSL_VERSION_NUMBER < 0x10100000) && !defined(OPENSSL_NO_ENGINE) && defined(HAVE_ENGINE_CLEANUP)
919926 ENGINE_cleanup();
927 # endif
920928 CONF_modules_free();
921929 # endif
922930 # ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
11 # to make sure the check doesn't fail on username or chrootdir.
22 username: ""
33 chroot: ""
4 directory: ""
45
56 forward-zone:
67 name: "example.com"
0 include: "good.min"
1
2 server:
3 # an abnormal value for the option
4 ip-dscp: 500
0 include-toplevel: include.withoutclauses.*
1 server:
2 identity: "top 1"
0 include-toplevel: include.withclauses.*
1 server:
2 identity: "top 1"
3 include: include.withoutclauses.*
4 include-toplevel: include.withoutclauses.*
0 include-toplevel: include.withclauses.*
1 server:
2 identity: "top 1"
3 include: include.withoutclauses.*
4 include-toplevel: include.withclauses.*
5 include: include.withoutclauses.*
0 include-toplevel: include.withclauses.*
1 server:
2 identity: "top 1"
3 include: include.withoutclauses.*
4 include-toplevel: include.withclauses.*
5 include: include.withclauses.*
6 include-toplevel: include.withoutclauses.*
0 include-toplevel: include.withclauses.*
1 server:
2 identity: "top 1"
3 include: include.withoutclauses.*
4 include-toplevel: include.withsomeclauses.*
5 include: include.withclauses.*
6 include-toplevel: include.withclauses.*
7 server: identity: "top 2"
0 include-toplevel: include.withclauses.*
1 include-toplevel: include.withclauses.*
2 server:
3 identity: "top 1"
4 include: include.withoutclauses.*
5 include-toplevel: include.withclauses.*
6 include: include.withclauses.*
7 include-toplevel: include.withclauses.*
8 server: identity: "top 2"
9 include-toplevel: include.includetop.withoutclauses.*
0 include-toplevel: include.withclauses.*
1 include-toplevel: include.withclauses.*
2 server:
3 identity: "top 1"
4 include: include.withoutclauses.*
5 include-toplevel: include.withclauses.*
6 include: include.withclauses.*
7 include-toplevel: include.withclauses.*
8 server: identity: "top 2"
9 include-toplevel: include.includetop.withclauses.*
10 include-toplevel: include.include.withoutclauses.*
00 server:
11 username: blabla_noexist_user
2 chroot: ""
3 directory: ""
219219 # more slabs reduce lock contention, but fragment memory usage.
220220 key-cache-slabs: 4
221221
222 # the value of the Differentiated Services Codepoint (DSCP)
223 # in the differentiated services field (DS) of the outgoing
224 # IP packets
225 ip-dscp: 5
222226
223227 # Stub zones.
224228 # Create entries like below, to make all queries for 'example.com' and
0 include-toplevel: include.withclauses.*
1 include-toplevel: include.withclauses.*
2 server:
3 identity: "top 1"
4 include: include.withoutclauses.*
5 include-toplevel: include.withclauses.*
6 include: include.withclauses.*
7 include-toplevel: include.withclauses.*
8 server: identity: "top 2"
9 include-toplevel: include.includetop.withclauses.*
10 include-toplevel: include.include.withclauses.*
11 include-toplevel: include.include.withclauses.*
12 server:
13 chroot: ""
14 directory: ""
15 username: ""
0 # the minimal passing config - include in your bad.x to verify that
1 # it is your option which triggers failure
2 server:
3 chroot: ""
4 username: ""
5 directory: "."
6 pidfile: ""
0 include-toplevel: include.withclauses.*
0 include-toplevel: include.withclauses.*
0 include-toplevel: include.withclauses.*
0 include-toplevel: include.withoutclauses.*
0 include-toplevel: include.withoutclauses.*
0 include-toplevel: include.withoutclauses.*
0 server: identity: "withclauses1"
0 server: identity: "withclauses2"
0 server: identity: "withclauses3"
0 server: identity: "withsomeclauses1"
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBozCCAQwCCQDd5/rocjG5vDANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkyNjEyMjQ0NFoXDTI4MDYxMzEyMjQ0NFowGjEYMBYGA1UE
3 AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt
4 i51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4GSLOE02/hKDkdkOva
5 UG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtODWc3tXPT1IlSEN0x
6 nAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQABMA0GCSqGSIb3DQEB
7 BQUAA4GBAHpvcKqY48X9WsqogV16L+zT7iXhZ4tySA9EBk1a+0gud/iDPKSBi7mK
8 4rzphVfb4S207dVmTG+1WNpa6l3pTGML6XLElxqIu/kr7w4cF0rKvZxWPsBRqYjH
9 5HrK8CrQ0+YvUHXiu7IaACLGvKXY4Tqa3HQyvEtzLWJ4HhOrGx8F
1 MIIDszCCAhsCFEm6EpzKglG+V66IyIlx6Q2y3y8nMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMzA3WhcNNDAwMzI1MTMzMzA3
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQC3/c89kYzt5J0KcRDTh/pj5eeanXTmC3GqgfEd/IYUbyWM
5 1J1PWEoGOuDUFFWzNOD5N3lX5ji8AdbbkS2+6+DQNAE0Mq2sxNNtNkpBtPoDteDK
6 njY6PwTJcVazwE3H+OgjWwAxSIKM8qkoAjlsgdXXwi3ifbwxdZNVfmZ/ByPzZc9N
7 CU7o6FNe0DjmJ08sUqQKngfzv0Qh8ijWx+T45MuOhI0tcU3cGgj0IhPpZkqtjSkC
8 J4uN2i1KWKvH9SnCmiMCnohXHONnY8ecllsHAfFU9ifKwyiBwpD0LIvWMFPamFZV
9 7YlgkXDAaDOIkfkIkQZWBaRy0S2C4q5vNIIh/1G5fqP+ffZlG0B5yGbY6LZbDEav
10 20W7MteBiy78xD4CHNwU/UwQaXIKTIvZ/GAOvLfhGrtFVBAv0+iWEFiTaithOWyM
11 JVGQbNe+kUgXw48MQSxfPZNMzaeSIKVrUaqwZcvfG48WMYP4IQwjmMHtT6PW4vb7
12 Fv+BVQwDG+k0cANxbX8CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEATI+xHWEiq3SK
13 9Dw2FBiD7GPaaPAh/u5h+QxaLS9G5a6Djh6F9RT3To+gRVeiaAaIPg53asGM5TGR
14 ojv9nI8cIvi3dL6VKhHSdomldFjfQYmF/uSKEYsHaggceGE/GsG8J8g79HXGRp2y
15 m5hkACKFh5ZcSHeJBplv7agDbBZ6w5qQaY6QsnYLrAK7B3Jo1Xx+JEKzmgnp4TwV
16 Ni4wezgLiG+buJ5lXEYr2Rm7HR/cxLRN7CFrpUoavFUvqLKNpXO8MJFx+BkO5/JT
17 pgv0O/ll9aT+kuegUpf9kcUzhpsw1N4W/JzZOyJAdxrrQ88aNZm+7d433wDBt/WF
18 BCV4d5wEASxfQALEQa+/1FebIsDfQyBAOHdTAVkupZ00oeNerKe+mHFmNjj04vn8
19 LwGgVuADCBJVCDhEqHLEXUqiGeSHJhAJO9pjma7r7H81OtAs/xVC8j8hqe8wLBKg
20 XNjWQ9QmNXt9VVQCMomro9lmoDozr9k1vsGtUsT3yQEAABQYwIjp
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBmzCCAQQCCQCDugnhq8B6LzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkyNjEyMjQ0M1oXDTI4MDYxMzEyMjQ0M1owEjEQMA4GA1UE
3 AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvYbqzRwbQe0B
4 RLjyTpwspVFlBdv1Et7/ckEEF57LblzEF0Wqtdbr4i5sGhrq1fbZ4F+fRyE7AU++
5 DUK7RSnxAy1Yi65tmqwDPTs7J+LZ799B1z0Q41DnNTNOUO1M42kqzr/k5DxKsobV
6 Mmj9Q2KNG3Jm8bUpGHNmRFgsIT5JVMECAwEAATANBgkqhkiG9w0BAQUFAAOBgQCy
7 zGMW35/9xXoEWsuLFWUOaEKVq5DXuXtXbcMpDW6k2ELoraa305vh7Zwhj5JSqfcm
8 O0xyqIzXvz/cYdyOTgEkdMDZ/EvQsxKTwvj6eA4614yB1r3Ju5eZd4Gpo6BHhSpu
9 oqsrr0duJ+JOANTyaBplIxM1sjHbR4FGtmrFknBYBQ==
1 MIIDqzCCAhMCFFzmVNbhjiApmjK3VeO/j9TBp8yOMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMzA3WhcNNDAwMzI1MTMzMzA3
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAr7FId+AlZUWP6MK9xfV0hJ9ooJdcL0sm9yZsWY4UYOlqcTGERah/XvQm
5 sOaKcMg8Wof24LAvo2vmariBYZoS61AAi6MeHHrPh8M2ZDMZQgW4nZC8A0biro93
6 nMLU1VxgycSVmj29p18IdNzsYWxC7t+/6AWQSlwD+9YFOYrVWQYxEcSZ7gZqoh08
7 mDsNRjnVs7nagPAbk/B9jj9zhvgp+0d5h25Ms7Td22t7DfsGlL8Ei3ewFwaqjThh
8 hVHEVwARBLYGb2ZsZS5EMJv2W/V0k6yQZ+rV07+i0oZQ0cGxOuUy9TNO7HfiI4ri
9 2x26Wm0YH1qgK5miUIAkbL2E/iWVxMfQOdEAZuOmUpUFOFpm/XHL1/pCyiqOb98j
10 jLE93UoNPZdsjrbjfQ/WPkap+vtigVZJJPet6F9x4S5XvrhXkV2JWIYMvhnrs9Np
11 veCOe1lcxNVSsIAtMxsZKi2dIq+mRhfm9/UGoOmj8UxIQUepJJv1IHcdASWkTAMm
12 USyF7z7DAgMBAAEwDQYJKoZIhvcNAQELBQADggGBAG+IhOsdEiaVCOB8PBRGJQ8F
13 /kyeQOtE7pPPkH57qYwAW9cxdSoiIxrvase30IGLWmOzjiAc/igf1qz/bVpwFXQr
14 XohzyeQJ2znlGzUbo67c8rocvWxHzvZwFuQEysJp/E9ft5kiWwoU/xVpoK5p9sxW
15 zRTTdpA24x6rqvk1ZFzwWGSg0yhjOYfwvwg3kGCbwe3GzAk1J65E+uJPFoLySbNL
16 p3eUDA2rUKDjVobJOEhtV8k/l+hB0kKwiz/A2sbMT/OoByWMNFKSkmDbNi5m5gJH
17 FHsZsucbL6ppLy7fmOiPlx6xejbiTR3uAn0aQImdHA5kyfAXLKhTkyYdjWHiHqdQ
18 XMxi0Ci7/HO9mRupbcjRZEPs//ozMxjOAg4VNasDLdnDI4EKrClqYPjsfoXXXiZf
19 YTPH9QypxJFGmGEH865BNacEjDBeag8ck1ZTiK/GlrAJMqfV5/60GWBGRQVV/Tvd
20 WXWY2x0gVp2fxtxF8JCvHKAcfUg2+LrUS7fbMx2Niw==
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE
3 AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD
4 6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3
5 qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US
6 J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB
7 BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B
8 9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC
9 iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
3 AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
4 y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
5 /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
6 g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
7 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
8 l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
9 Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
1021 -----END CERTIFICATE-----
00 -----BEGIN CERTIFICATE-----
1 MIICWTCCAYKgAwIBAgIJAN5YIkuCvJf5MA0GCSqGSIb3DQEBBQUAMCYxDjAMBgNV
2 BAMTBXBldGFsMRQwEgYJKoZIhvcNAQkBFgVwZXRhbDAeFw0xMzAxMTcxMTUyNDVa
3 Fw0zMjEwMDQxMTUyNDVaMCYxDjAMBgNVBAMTBXBldGFsMRQwEgYJKoZIhvcNAQkB
4 FgVwZXRhbDCB3zANBgkqhkiG9w0BAQEFAAOBzQAwgckCgcEAuPBoYZiFOuk2SnN0
5 IsheC+W7JvAJcv8tksyz/hgAnqStDnDrQ4trF607aCQ7xjj2fSAqpiMvLv0P3Ctu
6 rcTRHmRXApS3GBf1PjWqoxMK8JBxCIHN4PKpyq4czOtSPH6AFlU+3KsRRwymLgpT
7 SE15NYv/2M6Z3/cL1SkOdVvVDrZv1gO4OCAxwrgI6HMsjQtwe16mGsBQzrHTCOGV
8 u4QtISEUDrwZL272PFsZrEpHXd9LtSpqCEoOMujr54pKxBEJAgMBAAGjDzANMAsG
9 A1UdDwQEAwIChDANBgkqhkiG9w0BAQUFAAOBwQCaA3ys5hDPMNV1oXIxH6u2KfAX
10 C9tYJId/SR0x8whsZuNaSEZAgImdM5dnyWdjey8Pio772E9/F2aUBGFkdadZx4My
11 d7hBfEi/NECEKs86k9g0ijbin41NKtnajb6GwyNQ9vDx7Z5FS8BZ3CD0BZIdCQUE
12 gKuDSWBROQU3tqrjdk2QTwGQkj2mgzT871Jn1MwZw0mczPjS1y469Ejym8wi3uCd
13 EboDOoGBCpmUQbxBv6JI75cUCdmNNEwjQjZ0XQw=
1 MIICZDCCAY2gAwIBAgIURC8vM7SbxPTMmosTyBzLlqxgsUAwDQYJKoZIhvcNAQEF
2 BQAwJjEOMAwGA1UEAwwFcGV0YWwxFDASBgkqhkiG9w0BCQEWBXBldGFsMB4XDTIw
3 MDcwODE0MDk0MloXDTQwMDMyNTE0MDk0MlowJjEOMAwGA1UEAwwFcGV0YWwxFDAS
4 BgkqhkiG9w0BCQEWBXBldGFsMIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQC4
5 8GhhmIU66TZKc3QiyF4L5bsm8Aly/y2SzLP+GACepK0OcOtDi2sXrTtoJDvGOPZ9
6 ICqmIy8u/Q/cK26txNEeZFcClLcYF/U+NaqjEwrwkHEIgc3g8qnKrhzM61I8foAW
7 VT7cqxFHDKYuClNITXk1i//Yzpnf9wvVKQ51W9UOtm/WA7g4IDHCuAjocyyNC3B7
8 XqYawFDOsdMI4ZW7hC0hIRQOvBkvbvY8WxmsSkdd30u1KmoISg4y6OvnikrEEQkC
9 AwEAAaMPMA0wCwYDVR0PBAQDAgKEMA0GCSqGSIb3DQEBBQUAA4HBAHX0rIirg2Rt
10 +rp7BnR3riq81b0cWm4Y/UUdGmLtbPTJLuZogfLZhb9hf+185ub/8ZbuwuUFaiUY
11 zEcAjaOlPjBeRbNku1xnAVhlgtCIsCOyI37Ey+65OuJxL+0Rpwsyfh0WuR8SdBE5
12 OdJ2DuH2yRkTd2JEsNi+DZVIEeaKwXtLGUvsqYWu0GrnXORwGsezfiLM4uAJW+tp
13 VA95CKpfS98l1MJIHtlcpffAjfRVZAJnGcXv+P/DtefC8aNukoiqvA==
1414 -----END CERTIFICATE-----
4545 DAYS=7200
4646
4747 # size of keys in bits
48 BITS=1536
48 BITS=3072
4949
5050 # hash algorithm
5151 HASH=sha1
00 -----BEGIN RSA PRIVATE KEY-----
1 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
2038 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIICNjCCAV8CCQCbt2WrJa/ewzANBgkqhkiG9w0BAQUFADAmMQ4wDAYDVQQDEwVw
2 ZXRhbDEUMBIGCSqGSIb3DQEJARYFcGV0YWwwHhcNMTMwMTE3MTE1MjQ1WhcNMzIx
3 MDA0MTE1MjQ1WjAZMRcwFQYDVQQDEw51bmJvdW5kLWFuY2hvcjCB3zANBgkqhkiG
4 9w0BAQEFAAOBzQAwgckCgcEAtqdDE1VRH7zqWlpSOqyyhsWh38P+CVMVwsAx0ZJM
5 gdIZCEkTMfIpgfoqNGmNlHJPc5dAU4D2irRXgNPpbpGZO+ZHjrgEzxWcGwhrPuk8
6 eQKDePjcyGlWsuQLjvBNbugFXZnAKgcj/kfdss+X90/d/3ErGM6j2emNcDvbGm7a
7 5Bk2MJ3zIJ0rbcr5QSIUQ1mxDvq1i9ggotCba56YivLGtsrEAqvWOmYho0/TxFiG
8 cJMUOsuUyFlbcoraJJ6Q4XmXAgMBAAEwDQYJKoZIhvcNAQEFBQADgcEAhc3wYcbD
9 Uu9Osbu3bhbxLCkhedq/3weEO8RDU3AyB8diioAikagIOb99UeVE3WIds+JIPD6J
10 mK5UvS+lPR8SEOMRd0H91bEEp1Zn+gHAS/Z7k/x9t38Xk1N0jOnElc6n4vl42KLO
11 z2laJWcte7YXjzFjaNxP9fsGgEx1vRxcjtpXQWSY+oj+RVm5kRs5WKX5MCyD/p+y
12 Xitg7/a0ITKbW1GpVwaX6nPaeoze68m3qmy64l080XCna3igbhi3h2ay
1 MIIDBTCCAi4CFG36qDt2k02biKtMYGtLy9khnP+eMA0GCSqGSIb3DQEBBQUAMCYx
2 DjAMBgNVBAMMBXBldGFsMRQwEgYJKoZIhvcNAQkBFgVwZXRhbDAeFw0yMDA3MDgx
3 NDA5NDJaFw00MDAzMjUxNDA5NDJaMBkxFzAVBgNVBAMMDnVuYm91bmQtYW5jaG9y
4 MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAzDESJ2lpIno7KpSrYBeB
5 shT8H5dbtNF9rVBONsCmwSSqclLRixZ62OKrUKMVCEpZ0zj4yZOu3DGTfL9V9pEk
6 3dCD8mFmylidYeLh5GHGMcDVWOzDVPsnQ9y43KWYeURpGy4QSCxYDb5rrPysleSZ
7 wuN5D4lbs/AKdpubAHj6z37Zbrs2GjofHp6TaD6ck7jyRXDtqShrnsVXq9U1CadY
8 DOPiE4aZ1TvusRzhhjmDm8GQXalrtIBJ5j5EcmRamFhONGLshfj5ECZrKo9L17kO
9 d8PyRMaXNfvl2tpx1qtMxmp7FDpboGGIzP7F7hyaWMI/zAzkTMAtjGkAJWqHgTbS
10 fvlVul23RLvovM3fD/ZiugBuTWY/CRpmN7CQFFV6iFyLGjRp8vV7BojUIQX7is8Q
11 TxSqW12SsElMXOuUmcCnuIaoGF4nAoG6vNLFECtSdLTjQ0uXawIp7dOww4zS8j1/
12 dZzXsVF4G4V7GjeWD8eX7n+HNWoc3ojjuYzbWfWvLIQbAgMBAAEwDQYJKoZIhvcN
13 AQEFBQADgcEAPz9Iw956A8piiC5y3hJXAEJ0JYdNrpsgdj7n6iAXRU2EY+juzcKU
14 D+zcNEcebQJJxayr4eEMfUOUO1wH5uPkWBhKOC/qm6T6i/+/xNsksOeHm12G4/vH
15 VYPXTxMS+K+mz5HLmLcR0kuQMnCK22FFQj86fhr2vHBGHqINR6MxwvLCES37FWvr
16 qVZSseK6/6IwRgsjN101JUpaSnM88cMDpuUcqQrAbSSBRKDvjYMkcYcYuvchab26
17 G0jEU4KgxaOs
1318 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
2038 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIICFzCCAUACCQDO660L5y5LGDANBgkqhkiG9w0BAQUFADAQMQ4wDAYDVQQDEwVw
2 ZXRhbDAeFw0xMDA5MzAxMzQzMDFaFw0zMDA2MTcxMzQzMDFaMBAxDjAMBgNVBAMT
3 BXBldGFsMIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQC1xQ/Kca6zszZbcCtd
4 OTIH2Uy2gOy/DfabMUU7TmNPm0dVE0NJRuN+Rm304SonpwghfP2/ULZNnuDgpG03
5 /32yI7k/VzG6iA4hiF7tT/KAAWC/+2l1QCsawCV2bSrFK0VhcZr7ALqXd8vkDaQ8
6 67K029ypjOQtAJ85qdO3mERy7TGtdUcuO6hLeVet419YeQ2F8cfNxn63d7bOzNGL
7 PW5xwaCd3UcgD+Ib0k4xfFvbinvPQUeUJ/i4YDWexFYSL+ECAwEAATANBgkqhkiG
8 9w0BAQUFAAOBwQBBkX9KDP2RXbg+xPmdJ4P6CwvA5x1LZwC++ydVx4NlvT0pWicD
9 ZUnXjcWAJlkeOuUBAqFG7WHTrXpUUAjmdqFVq2yFjteUYBdrFz0RDB2jM9feeKYO
10 mTgxdZyT9a6humxCxt5VfgT02axLjm/2AqCyFPMbf4PASoJDln01AEuZLZ8Xl2gV
11 bYHMnHTGoD1Hu6FNEzRgkMC6XT8X3YjHvzQhpc/qL5wEfEsinQGdX4twsuWbf8xd
12 q7miNnkO8vd0maw=
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
1321 -----END CERTIFICATE-----
105105 SECTION ANSWER
106106 www.example.com. IN A 10.20.30.40
107107 ENTRY_END
108 RANGE_END
109108
110109 RANGE_END
111110
9696 SECTION ANSWER
9797 www.example.com. IN A 10.20.30.40
9898 ENTRY_END
99 RANGE_END
10099
101100 RANGE_END
102101
8484 SECTION ANSWER
8585 www.example.com. IN A 10.20.30.40
8686 ENTRY_END
87 RANGE_END
8887
8988 RANGE_END
9089
77 fake-sha1: yes
88 trust-anchor-signaling: no
99 minimal-responses: no
10 rrset-roundrobin: no
1011
1112 stub-zone:
1213 name: "."
77 fake-sha1: yes
88 trust-anchor-signaling: no
99 minimal-responses: no
10 rrset-roundrobin: no
1011
1112 stub-zone:
1213 name: "."
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE
3 AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD
4 6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3
5 qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US
6 J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB
7 BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B
8 9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC
9 iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
3 AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
4 y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
5 /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
6 g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
7 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
8 l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
9 Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE
3 AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD
4 6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3
5 qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US
6 J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB
7 BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B
8 9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC
9 iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
3 AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
4 y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
5 /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
6 g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
7 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
8 l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
9 Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
1021 -----END CERTIFICATE-----
0 server:
1 verbosity: 2
2 num-threads: 3
3 outgoing-range: 16
4 interface: 127.0.0.1
5 port: @PORT@
6 use-syslog: no
7 directory: ""
8 pidfile: "unbound.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 local-zone: "example.net." redirect
13 local-data: "example.net. IN A 10.20.30.41"
14 remote-control:
15 control-enable: yes
16 control-interface: 127.0.0.1
17 # control-interface: ::1
18 control-port: @CONTROL_PORT@
19 server-key-file: "unbound_server.key"
20 server-cert-file: "unbound_server.pem"
21 control-key-file: "unbound_control.key"
22 control-cert-file: "unbound_control.pem"
23 forward-zone:
24 name: "."
25 forward-addr: "127.0.0.1@@TOPORT@"
26 dnstap:
27 dnstap-enable: yes
28 dnstap-socket-path: "dnstap.socket"
29 dnstap-send-identity: yes
30 dnstap-send-version: yes
31 #dnstap-identity
32 #dnstap-version
33 dnstap-log-resolver-query-messages: yes
34 dnstap-log-resolver-response-messages: yes
35 dnstap-log-client-query-messages: yes
36 dnstap-log-client-response-messages: yes
37 dnstap-log-forwarder-query-messages: yes
38 dnstap-log-forwarder-response-messages: yes
39
0 BaseName: dnstap
1 Version: 1.0
2 Description: test dnstap socket communication
3 CreationDate: Tue Jan 21 13:00:38 CET 2020
4 Maintainer: dr. W.C.A. Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: dnstap.pre
11 Post: dnstap.post
12 Test: dnstap.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- dnstap.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10 kill_pid $DNSTAP_SOCKET_PID
11 kill_pid $FWD_PID
12 kill $UNBOUND_PID
13 kill $UNBOUND_PID >/dev/null 2>&1
14 cat unbound.log
15 exit 0
0 # #-- dnstap.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10
11 get_random_port 3
12 UNBOUND_PORT=$RND_PORT
13 FWD_PORT=$(($RND_PORT + 1))
14 CONTROL_PORT=$(($RND_PORT + 2))
15 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
16 echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
17 echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
18
19 # start forwarder
20 get_ldns_testns
21 $LDNS_TESTNS -p $FWD_PORT dnstap.testns >fwd.log 2>&1 &
22 FWD_PID=$!
23 echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
24
25 # start the dnstap log server
26 # the -vvvv flag prints protocol and connection information from the
27 # unbound-dnstap-socket server.
28 # the -l flag prints the DNS info in the DNSTAP packet in multiline output.
29 # stderr is the '-vvvv' server logs and errors.
30 # stdout is the one-line packet logs (or with -l, multiline).
31 $PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap.errlog >tap.log &
32 if test $? -ne 0; then
33 echo "could not start unbound-dnstap-socket server"
34 exit 1
35 fi
36 DNSTAP_SOCKET_PID=$!
37 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
38 # wait for the server to go up and make the dnstap.socket file
39 wait_server_up "tap.errlog" "creating unix socket"
40 if test ! -S dnstap.socket; then
41 echo "the dnstap.socket file does not exist!"
42 fi
43
44 # make config file
45 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < dnstap.conf > ub.conf
46 # start unbound in the background
47 $PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
48 UNBOUND_PID=$!
49 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
50
51 cat .tpkg.var.test
52 wait_ldns_testns_up fwd.log
53 wait_unbound_up unbound.log
54
0 # #-- dnstap.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7 PRE="../.."
8 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9
10 # test if the server is up.
11 echo "> dig www.example.com."
12 dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
13 echo "> check answer"
14 if grep "10.20.30.40" outfile; then
15 echo "OK"
16 else
17 echo "> cat logfiles"
18 cat tap.log
19 cat tap.errlog
20 cat fwd.log
21 cat unbound.log
22 echo "Not OK"
23 exit 1
24 fi
25
26 echo "> check tap.log for dnstap info"
27 # see if it logged the information in tap.log
28 # wait for a moment for filesystem to catch up.
29 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
30 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
31 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
32 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
33 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
34 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi
35 if grep "www.example.com" tap.log; then echo "yes it is in tap.log";
36 else
37 echo "information not in tap.log"
38 echo "failed"
39 echo "> cat logfiles"
40 cat tap.log
41 cat tap.errlog
42 cat fwd.log
43 cat unbound.log
44 echo "Not OK"
45 exit 1
46 fi
47
48 echo "> make 10 queries to spread them over threads"
49 dig @127.0.0.1 -p $UNBOUND_PORT q1.example.net.
50 dig @127.0.0.1 -p $UNBOUND_PORT q2.example.net.
51 dig @127.0.0.1 -p $UNBOUND_PORT q3.example.net.
52 dig @127.0.0.1 -p $UNBOUND_PORT q4.example.net.
53 dig @127.0.0.1 -p $UNBOUND_PORT q5.example.net.
54 dig @127.0.0.1 -p $UNBOUND_PORT q6.example.net.
55 dig @127.0.0.1 -p $UNBOUND_PORT q7.example.net.
56 dig @127.0.0.1 -p $UNBOUND_PORT q8.example.net.
57 dig @127.0.0.1 -p $UNBOUND_PORT q9.example.net.
58 dig @127.0.0.1 -p $UNBOUND_PORT q10.example.net.
59 for x in q1 q2 q3 q4 5 q6 q7 q8 q9 q10; do
60 if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi
61 if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi
62 if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi
63 if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi
64 if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 1; fi
65 if grep "$x.example.net" tap.log >/dev/null; then :; else sleep 10; fi
66 if grep "$x.example.net" tap.log; then echo "yes it is in tap.log";
67 else
68 echo "$x.example.net. information not in tap.log"
69 echo "failed"
70 echo "> cat logfiles"
71 cat tap.log
72 cat tap.errlog
73 cat fwd.log
74 cat unbound.log
75 echo "Not OK"
76 exit 1
77 fi
78 done
79
80 echo "> cat logfiles"
81 cat tap.log
82 cat tap.errlog
83 cat fwd.log
84 echo "> OK"
85 exit 0
0 ; nameserver test file
1 $ORIGIN example.com.
2 $TTL 3600
3
4 ENTRY_BEGIN
5 MATCH opcode qtype qname
6 REPLY QR AA NOERROR
7 ADJUST copy_id
8 SECTION QUESTION
9 www IN A
10 SECTION ANSWER
11 www IN A 10.20.30.40
12 ENTRY_END
13
14 ENTRY_BEGIN
15 MATCH opcode qtype qname
16 REPLY QR AA SERVFAIL
17 ADJUST copy_id
18 SECTION QUESTION
19 www.example.net. IN A
20 ENTRY_END
21
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
21 -----END CERTIFICATE-----
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
21 -----END CERTIFICATE-----
0 server:
1 verbosity: 2
2 num-threads: 1
3 outgoing-range: 16
4 interface: 127.0.0.1
5 port: @PORT@
6 use-syslog: no
7 directory: ""
8 pidfile: "unbound.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 local-zone: "example.net." redirect
13 local-data: "example.net. IN A 10.20.30.41"
14 remote-control:
15 control-enable: yes
16 control-interface: 127.0.0.1
17 # control-interface: ::1
18 control-port: @CONTROL_PORT@
19 server-key-file: "unbound_server.key"
20 server-cert-file: "unbound_server.pem"
21 control-key-file: "unbound_control.key"
22 control-cert-file: "unbound_control.pem"
23 forward-zone:
24 name: "."
25 forward-addr: "127.0.0.1@@TOPORT@"
26 dnstap:
27 dnstap-enable: yes
28 dnstap-socket-path: "dnstap.socket"
29 dnstap-send-identity: yes
30 dnstap-send-version: yes
31 #dnstap-identity
32 #dnstap-version
33 dnstap-log-resolver-query-messages: yes
34 dnstap-log-resolver-response-messages: yes
35 dnstap-log-client-query-messages: yes
36 dnstap-log-client-response-messages: yes
37 dnstap-log-forwarder-query-messages: yes
38 dnstap-log-forwarder-response-messages: yes
39
0 BaseName: dnstap_reconnect
1 Version: 1.0
2 Description: test dnstap reconnect
3 CreationDate: Tue Jan 21 13:00:38 CET 2020
4 Maintainer: dr. W.C.A. Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: dnstap_reconnect.pre
11 Post: dnstap_reconnect.post
12 Test: dnstap_reconnect.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- dnstap_reconnect.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10 kill_pid $DNSTAP_SOCKET_PID
11 kill_pid $FWD_PID
12 kill $UNBOUND_PID
13 kill $UNBOUND_PID >/dev/null 2>&1
14 cat unbound.log
15 exit 0
0 # #-- dnstap_reconnect.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10
11 get_random_port 3
12 UNBOUND_PORT=$RND_PORT
13 FWD_PORT=$(($RND_PORT + 1))
14 CONTROL_PORT=$(($RND_PORT + 2))
15 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
16 echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
17 echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
18
19 # start forwarder
20 get_ldns_testns
21 $LDNS_TESTNS -p $FWD_PORT dnstap_reconnect.testns >fwd.log 2>&1 &
22 FWD_PID=$!
23 echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
24
25 # start the dnstap log server
26 # the -vvvv flag prints protocol and connection information from the
27 # unbound-dnstap-socket server.
28 # the -l flag prints the DNS info in the DNSTAP packet in multiline output.
29 # stderr is the '-vvvv' server logs and errors.
30 # stdout is the one-line packet logs (or with -l, multiline).
31 $PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap.errlog >tap.log &
32 if test $? -ne 0; then
33 echo "could not start unbound-dnstap-socket server"
34 exit 1
35 fi
36 DNSTAP_SOCKET_PID=$!
37 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
38 # wait for the server to go up and make the dnstap.socket file
39 wait_server_up "tap.errlog" "creating unix socket"
40 if test ! -S dnstap.socket; then
41 echo "the dnstap.socket file does not exist!"
42 fi
43
44 # make config file
45 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < dnstap_reconnect.conf > ub.conf
46 # start unbound in the background
47 $PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
48 UNBOUND_PID=$!
49 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
50
51 cat .tpkg.var.test
52 wait_ldns_testns_up fwd.log
53 wait_unbound_up unbound.log
54
0 # #-- dnstap_reconnect.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7 PRE="../.."
8 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9
10 # test if the server is up.
11 echo "> dig www.example.com."
12 dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
13 echo "> check answer"
14 if grep "10.20.30.40" outfile; then
15 echo "OK"
16 else
17 echo "> cat logfiles"
18 cat tap.log
19 cat tap.errlog
20 cat fwd.log
21 cat unbound.log
22 echo "Not OK"
23 exit 1
24 fi
25
26 echo "> check tap.log for dnstap info"
27 # see if it logged the information in tap.log
28 # wait for a moment for filesystem to catch up.
29 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
30 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
31 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
32 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi
33 if grep "www.example.com" tap.log; then echo "yes it is in tap.log";
34 else
35 echo "information not in tap.log"
36 echo "failed"
37 echo "> cat logfiles"
38 cat tap.log
39 cat tap.errlog
40 cat fwd.log
41 cat unbound.log
42 echo "Not OK"
43 exit 1
44 fi
45
46 echo ""
47 echo "> test disconnect from the upstream server"
48
49 kill_pid $DNSTAP_SOCKET_PID
50 dig @127.0.0.1 -p $UNBOUND_PORT down.example.net.
51
52 # bring log socket back up
53 $PRE/unbound-dnstap-socket -u dnstap.socket -l -vvvv 2>tap2.errlog >tap2.log &
54 if test $? -ne 0; then
55 echo "could not start (again) unbound-dnstap-socket server"
56 exit 1
57 fi
58 DNSTAP_SOCKET_PID=$!
59 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
60 # wait for the server to go up and make the dnstap.socket file
61 wait_server_up "tap2.errlog" "creating unix socket"
62
63 dig @127.0.0.1 -p $UNBOUND_PORT up.example.net.
64 sleep 2
65 dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net.
66
67 for x in down up up2; do
68 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
69 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
70 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
71 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi
72 if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log";
73 else
74 echo "$x.example.net. information not in tap2.log"
75 echo "failed"
76 echo "> cat logfiles"
77 cat tap.log
78 cat tap.errlog
79 echo "> tap2 logfiles"
80 cat tap2.log
81 cat tap2.errlog
82 cat fwd.log
83 cat unbound.log
84 echo "Not OK"
85 exit 1
86 fi
87 done
88
89 echo "> cat logfiles"
90 cat tap.log
91 cat tap.errlog
92 echo "> tap2 logfiles"
93 cat tap2.log
94 cat tap2.errlog
95 cat fwd.log
96 echo "> OK"
97 exit 0
0 ; nameserver test file
1 $ORIGIN example.com.
2 $TTL 3600
3
4 ENTRY_BEGIN
5 MATCH opcode qtype qname
6 REPLY QR AA NOERROR
7 ADJUST copy_id
8 SECTION QUESTION
9 www IN A
10 SECTION ANSWER
11 www IN A 10.20.30.40
12 ENTRY_END
13
14 ENTRY_BEGIN
15 MATCH opcode qtype qname
16 REPLY QR AA SERVFAIL
17 ADJUST copy_id
18 SECTION QUESTION
19 www.example.net. IN A
20 ENTRY_END
21
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
21 -----END CERTIFICATE-----
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
21 -----END CERTIFICATE-----
0 server:
1 verbosity: 2
2 num-threads: 1
3 outgoing-range: 16
4 interface: 127.0.0.1
5 port: @PORT@
6 use-syslog: no
7 directory: ""
8 pidfile: "unbound.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 local-zone: "example.net." redirect
13 local-data: "example.net. IN A 10.20.30.41"
14 remote-control:
15 control-enable: yes
16 control-interface: 127.0.0.1
17 # control-interface: ::1
18 control-port: @CONTROL_PORT@
19 server-key-file: "unbound_server.key"
20 server-cert-file: "unbound_server.pem"
21 control-key-file: "unbound_control.key"
22 control-cert-file: "unbound_control.pem"
23 forward-zone:
24 name: "."
25 forward-addr: "127.0.0.1@@TOPORT@"
26 dnstap:
27 dnstap-enable: yes
28 dnstap-socket-path: "dnstap.socket"
29 dnstap-ip: "127.0.0.1@@TAPPORT@"
30 dnstap-tls: no
31 dnstap-send-identity: yes
32 dnstap-send-version: yes
33 #dnstap-identity
34 #dnstap-version
35 dnstap-log-resolver-query-messages: yes
36 dnstap-log-resolver-response-messages: yes
37 dnstap-log-client-query-messages: yes
38 dnstap-log-client-response-messages: yes
39 dnstap-log-forwarder-query-messages: yes
40 dnstap-log-forwarder-response-messages: yes
41
0 BaseName: dnstap_tcp
1 Version: 1.0
2 Description: test dnstap tcp and reconnect
3 CreationDate: Tue Feb 14 14:00:38 CET 2020
4 Maintainer: dr. W.C.A. Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: dnstap_tcp.pre
11 Post: dnstap_tcp.post
12 Test: dnstap_tcp.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- dnstap_tcp.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10 kill_pid $DNSTAP_SOCKET_PID
11 kill_pid $FWD_PID
12 kill $UNBOUND_PID
13 kill $UNBOUND_PID >/dev/null 2>&1
14 cat unbound.log
15 echo "> tap logfiles"
16 cat tap.log
17 cat tap.errlog
18 echo "> tap2 logfiles"
19 if test -f tap2.log; then cat tap2.log; fi
20 if test -f tap2.errlog; then cat tap2.errlog; fi
21 cat fwd.log
22 exit 0
0 # #-- dnstap_tcp.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10
11 get_random_port 4
12 UNBOUND_PORT=$RND_PORT
13 FWD_PORT=$(($RND_PORT + 1))
14 CONTROL_PORT=$(($RND_PORT + 2))
15 TAP_PORT=$(($RND_PORT + 3))
16 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
17 echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
18 echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
19 echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test
20
21 # start forwarder
22 get_ldns_testns
23 $LDNS_TESTNS -p $FWD_PORT dnstap_tcp.testns >fwd.log 2>&1 &
24 FWD_PID=$!
25 echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
26
27 # start the dnstap log server
28 # the -vvvv flag prints protocol and connection information from the
29 # unbound-dnstap-socket server.
30 # the -l flag prints the DNS info in the DNSTAP packet in multiline output.
31 # stderr is the '-vvvv' server logs and errors.
32 # stdout is the one-line packet logs (or with -l, multiline).
33 $PRE/unbound-dnstap-socket -s "127.0.0.1@$TAP_PORT" -l -vvvv 2>tap.errlog >tap.log &
34 if test $? -ne 0; then
35 echo "could not start unbound-dnstap-socket server"
36 exit 1
37 fi
38 DNSTAP_SOCKET_PID=$!
39 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
40 # wait for the server to go up
41 wait_server_up "tap.errlog" "start of service"
42
43 # make config file
44 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tcp.conf > ub.conf
45 # start unbound in the background
46 $PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
47 UNBOUND_PID=$!
48 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
49
50 cat .tpkg.var.test
51 wait_ldns_testns_up fwd.log
52 wait_unbound_up unbound.log
53
0 # #-- dnstap_tcp.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7 PRE="../.."
8 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9
10 # test if the server is up.
11 echo "> dig www.example.com."
12 dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
13 echo "> check answer"
14 if grep "10.20.30.40" outfile; then
15 echo "OK"
16 else
17 echo "> cat logfiles"
18 cat tap.log
19 cat tap.errlog
20 cat fwd.log
21 cat unbound.log
22 echo "Not OK"
23 exit 1
24 fi
25
26 echo "> check tap.log for dnstap info"
27 # see if it logged the information in tap.log
28 # wait for a moment for filesystem to catch up.
29 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
30 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
31 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
32 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
33 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
34 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi
35 if grep "www.example.com" tap.log; then echo "yes it is in tap.log";
36 else
37 echo "information not in tap.log"
38 echo "failed"
39 echo "> cat logfiles"
40 cat tap.log
41 cat tap.errlog
42 cat fwd.log
43 cat unbound.log
44 echo "Not OK"
45 exit 1
46 fi
47
48 echo ""
49 echo "> test disconnect from the upstream server"
50
51 kill_pid $DNSTAP_SOCKET_PID
52 dig @127.0.0.1 -p $UNBOUND_PORT down.example.net.
53
54 # bring log socket back up
55 $PRE/unbound-dnstap-socket -s "127.0.0.1@$TAP_PORT" -l -vvvv 2>tap2.errlog >tap2.log &
56 if test $? -ne 0; then
57 echo "could not start (again) unbound-dnstap-socket server"
58 exit 1
59 fi
60 DNSTAP_SOCKET_PID=$!
61 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
62 # wait for the server to go up
63 wait_server_up "tap2.errlog" "start of service"
64
65 dig @127.0.0.1 -p $UNBOUND_PORT up.example.net.
66 sleep 2
67 dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net.
68
69 for x in down up up2; do
70 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
71 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
72 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
73 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
74 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
75 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi
76 if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log";
77 else
78 echo "$x.example.net. information not in tap2.log"
79 echo "failed"
80 echo "> cat logfiles"
81 cat tap.log
82 cat tap.errlog
83 echo "> tap2 logfiles"
84 cat tap2.log
85 cat tap2.errlog
86 cat fwd.log
87 cat unbound.log
88 echo "Not OK"
89 exit 1
90 fi
91 done
92
93 echo "> OK"
94 exit 0
0 ; nameserver test file
1 $ORIGIN example.com.
2 $TTL 3600
3
4 ENTRY_BEGIN
5 MATCH opcode qtype qname
6 REPLY QR AA NOERROR
7 ADJUST copy_id
8 SECTION QUESTION
9 www IN A
10 SECTION ANSWER
11 www IN A 10.20.30.40
12 ENTRY_END
13
14 ENTRY_BEGIN
15 MATCH opcode qtype qname
16 REPLY QR AA SERVFAIL
17 ADJUST copy_id
18 SECTION QUESTION
19 www.example.net. IN A
20 ENTRY_END
21
0 -----BEGIN RSA PRIVATE KEY-----
1 MIIG4gIBAAKCAYEAstEp+Pyh8XGrtZ77A4FhYjvbeB3dMa7Q2rGWxobzlA9przhA
2 1aChAvUtCOAuM+rB6NTNB8YWfZJbQHawyMNpmC77cg6vXLYCGUQHZyAqidN049RJ
3 F5T7j4N8Vniv17LiRdr0S6swy4PRvEnIPPV43EQHZqC5jVvHsKkhIfmBF/Dj5TXR
4 ypeawWV/m5jeU6/4HRYMfytBZdO1mPXuWLh0lgbQ4SCbgrOUVD3rniMk1yZIbQOm
5 vlDHYqekjDb/vOW2KxUQLG04aZMJ1mWfdbwG0CKQkSjISEDZ1l76vhM6mTM0fwXb
6 IvyFZ9yPPCle1mF5aSlxS2cmGuGVSRQaw8XF9fe3a9ACJJTr33HdSpyaZkKRAUzL
7 cKqLCl323daKv3NwwAT03Tj4iQM416ASMoiyfFa/2GWTKQVjddu8Crar7tGaf5xr
8 lig4DBmrBvdYA3njy72/RD71hLwmlRoCGU7dRuDr9O6KASUm1Ri91ONZ/qdjMvov
9 15l2vj4GV+KXR00dAgMBAAECggGAHepIL1N0dEQkCdpy+/8lH54L9WhpnOo2HqAf
10 LU9eaKK7d4jdr9+TkD8cLaPzltPrZNxVALvu/0sA4SP6J1wpyj/x6P7z73qzly5+
11 Xo5PD4fEwmi9YaiW/UduAblnEZrnp/AddptJKoL/D5T4XtpiQddPtael4zQ7kB57
12 YIexRSQTvEDovA/o3/nvA0TrzOxfgd4ycQP3iOWGN/TMzyLsvjydrUwbOB567iz9
13 whL3Etdgvnwh5Sz2blbFfH+nAR8ctvFFz+osPvuIVR21VMEI6wm7kTpSNnQ6sh/c
14 lrLb/bTADn4g7z/LpIZJ+MrLvyEcoqValrLYeFBhM9CV8woPxvkO2P3pU47HVGax
15 tC7GV6a/kt5RoKFd/TNdiA3OC7NGZtaeXv9VkPf4fVwBtSO9d5ZZXTGEynDD/rUQ
16 U4KFJe6OD23APjse08HiiKqTPhsOneOONU67iqoaTdIkT2R4EdlkVEDpXVtWb+G9
17 Q+IqYzVljlzuyHrhWXLJw/FMa2aBAoHBAOnZbi4gGpH+P6886WDWVgIlTccuXoyc
18 Mg9QQYk9UDeXxL0AizR5bZy49Sduegz9vkHpAiZARQsUnizHjZ8YlRcrmn4t6tx3
19 ahTIKAjdprnxJfYINM580j8CGbXvX5LhIlm3O267D0Op+co3+7Ujy+cjsIuFQrP+
20 1MqMgXSeBjzC1APivmps7HeFE+4w0k2PfN5wSMDNCzLo99PZuUG5XZ93OVOS5dpN
21 b+WskdcD8NOoJy/X/5A08veEI/jYO/DyqQKBwQDDwUQCOWf41ecvJLtBHKmEnHDz
22 ftzHino9DRKG8a9XaN4rmetnoWEaM2vHGX3pf3mwH+dAe8vJdAQueDhBKYeEpm6C
23 TYNOpou1+Zs5s99BilCTNYo8fkMOAyqwRwmz9zgHS6QxXuPwsghKefLJGt6o6RFF
24 tfWVTfLlYJ+I3GQe3ySsk3wjVz4oUTKiyiq5+KzD+HhEkS7u+RQ7Z0ZI2xd2cF8Y
25 aN2hjKDpcOiFf3CDoqka5D1qMNLgIHO52AHww1UCgcA1h7o7AMpURRka6hyaODY0
26 A4oMYEbwdQjYjIyT998W+rzkbu1us6UtzQEBZ760npkgyU/epbOoV63lnkCC/MOU
27 LD0PST+L/CHiY/cWIHb79YG1EifUZKpUFg0Aoq0EGFkepF0MefGCkbRGYA5UZr9U
28 R80wAu9D+L+JJiS0J0BSRF74DL196zUuHt5zFeXuLzxsRtPAnq9DliS08BACRYZy
29 7H3I7cWD9Vn5/0jbKWHFcaaWwyETR6uekTcSzZzbCRECgcBeoE3/xUA9SSk34Mmj
30 7/cB4522Ft0imA3+9RK/qJTZ7Bd5fC4PKjOGNtUiqW/0L2rjeIiQ40bfWvWqgPKw
31 jSK1PL6uvkl6+4cNsFsYyZpiVDoe7wKju2UuoNlB3RUTqa2r2STFuNj2wRjA57I1
32 BIgdnox65jqQsd14g/yaa+75/WP9CE45xzKEyrtvdcqxm0Pod3OrsYK+gikFjiar
33 kT0GQ8u0QPzh2tjt/2ZnIfOBrl+QYERP0MofDZDjhUdq2wECgcB0Lu841+yP5cdR
34 qbJhXO4zJNh7oWNcJlOuQp3ZMNFrA1oHpe9pmLukiROOy01k9WxIMQDzU5GSqRv3
35 VLkYOIcbhJ3kClKAcM3j95SkKbU2H5/RENb3Ck52xtl4pNU1x/3PnVFZfDVuuHO9
36 MZ9YBcIeK98MyP2jr5JtFKnOyPE7xKq0IHIhXadpbc2wjje5FtZ1cUtMyEECCXNa
37 C1TpXebHGyXGpY9WdWXhjdE/1jPvfS+uO5WyuDpYPr339gsdq1g=
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
21 -----END CERTIFICATE-----
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
21 -----END CERTIFICATE-----
0 server:
1 verbosity: 2
2 num-threads: 1
3 outgoing-range: 16
4 interface: 127.0.0.1
5 port: @PORT@
6 use-syslog: no
7 directory: ""
8 pidfile: "unbound.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 local-zone: "example.net." redirect
13 local-data: "example.net. IN A 10.20.30.41"
14 remote-control:
15 control-enable: yes
16 control-interface: 127.0.0.1
17 # control-interface: ::1
18 control-port: @CONTROL_PORT@
19 server-key-file: "unbound_server.key"
20 server-cert-file: "unbound_server.pem"
21 control-key-file: "unbound_control.key"
22 control-cert-file: "unbound_control.pem"
23 forward-zone:
24 name: "."
25 forward-addr: "127.0.0.1@@TOPORT@"
26 dnstap:
27 dnstap-enable: yes
28 dnstap-socket-path: "dnstap.socket"
29 dnstap-ip: "127.0.0.1@@TAPPORT@"
30 dnstap-tls: yes
31 dnstap-send-identity: yes
32 dnstap-send-version: yes
33 #dnstap-identity
34 #dnstap-version
35 dnstap-log-resolver-query-messages: yes
36 dnstap-log-resolver-response-messages: yes
37 dnstap-log-client-query-messages: yes
38 dnstap-log-client-response-messages: yes
39 dnstap-log-forwarder-query-messages: yes
40 dnstap-log-forwarder-response-messages: yes
41
0 BaseName: dnstap_tls
1 Version: 1.0
2 Description: test dnstap tls and reconnect
3 CreationDate: Tue Feb 14 14:00:38 CET 2020
4 Maintainer: dr. W.C.A. Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: dnstap_tls.pre
11 Post: dnstap_tls.post
12 Test: dnstap_tls.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- dnstap_tls.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10 kill_pid $DNSTAP_SOCKET_PID
11 kill_pid $FWD_PID
12 kill $UNBOUND_PID
13 kill $UNBOUND_PID >/dev/null 2>&1
14 cat unbound.log
15 echo "> tap logfiles"
16 cat tap.log
17 cat tap.errlog
18 echo "> tap2 logfiles"
19 if test -f tap2.log; then cat tap2.log; fi
20 if test -f tap2.errlog; then cat tap2.errlog; fi
21 cat fwd.log
22 exit 0
0 # #-- dnstap_tls.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10
11 get_random_port 4
12 UNBOUND_PORT=$RND_PORT
13 FWD_PORT=$(($RND_PORT + 1))
14 CONTROL_PORT=$(($RND_PORT + 2))
15 TAP_PORT=$(($RND_PORT + 3))
16 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
17 echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
18 echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
19 echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test
20
21 # start forwarder
22 get_ldns_testns
23 $LDNS_TESTNS -p $FWD_PORT dnstap_tls.testns >fwd.log 2>&1 &
24 FWD_PID=$!
25 echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
26
27 # start the dnstap log server
28 # the -vvvv flag prints protocol and connection information from the
29 # unbound-dnstap-socket server.
30 # the -l flag prints the DNS info in the DNSTAP packet in multiline output.
31 # stderr is the '-vvvv' server logs and errors.
32 # stdout is the one-line packet logs (or with -l, multiline).
33 $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log &
34 if test $? -ne 0; then
35 echo "could not start unbound-dnstap-socket server"
36 exit 1
37 fi
38 DNSTAP_SOCKET_PID=$!
39 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
40 # wait for the server to go up
41 wait_server_up "tap.errlog" "start of service"
42
43 # make config file
44 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls.conf > ub.conf
45 # start unbound in the background
46 $PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
47 UNBOUND_PID=$!
48 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
49
50 cat .tpkg.var.test
51 wait_ldns_testns_up fwd.log
52 wait_unbound_up unbound.log
53
0 # #-- dnstap_tls.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7 PRE="../.."
8 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9
10 # test if the server is up.
11 echo "> dig www.example.com."
12 dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
13 echo "> check answer"
14 if grep "10.20.30.40" outfile; then
15 echo "OK"
16 else
17 echo "> cat logfiles"
18 cat tap.log
19 cat tap.errlog
20 cat fwd.log
21 cat unbound.log
22 echo "Not OK"
23 exit 1
24 fi
25
26 echo "> check tap.log for dnstap info"
27 # see if it logged the information in tap.log
28 # wait for a moment for filesystem to catch up.
29 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
30 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
31 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
32 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
33 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
34 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi
35 if grep "www.example.com" tap.log; then echo "yes it is in tap.log";
36 else
37 echo "information not in tap.log"
38 echo "failed"
39 echo "> cat logfiles"
40 cat tap.log
41 cat tap.errlog
42 cat fwd.log
43 cat unbound.log
44 echo "Not OK"
45 exit 1
46 fi
47
48 echo ""
49 echo "> test disconnect from the upstream server"
50
51 kill_pid $DNSTAP_SOCKET_PID
52 dig @127.0.0.1 -p $UNBOUND_PORT down.example.net.
53
54 # bring log socket back up
55 $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap2.errlog >tap2.log &
56 if test $? -ne 0; then
57 echo "could not start (again) unbound-dnstap-socket server"
58 exit 1
59 fi
60 DNSTAP_SOCKET_PID=$!
61 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
62 # wait for the server to go up
63 wait_server_up "tap2.errlog" "start of service"
64
65 dig @127.0.0.1 -p $UNBOUND_PORT up.example.net.
66 sleep 2
67 dig @127.0.0.1 -p $UNBOUND_PORT up2.example.net.
68
69 for x in down up up2; do
70 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
71 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
72 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
73 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
74 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 1; fi
75 if grep "$x.example.net" tap2.log >/dev/null; then :; else sleep 10; fi
76 if grep "$x.example.net" tap2.log; then echo "yes it is in tap2.log";
77 else
78 echo "$x.example.net. information not in tap2.log"
79 echo "failed"
80 echo "> cat logfiles"
81 cat tap.log
82 cat tap.errlog
83 echo "> tap2 logfiles"
84 cat tap2.log
85 cat tap2.errlog
86 cat fwd.log
87 cat unbound.log
88 echo "Not OK"
89 exit 1
90 fi
91 done
92
93 echo "> OK"
94 exit 0
0 ; nameserver test file
1 $ORIGIN example.com.
2 $TTL 3600
3
4 ENTRY_BEGIN
5 MATCH opcode qtype qname
6 REPLY QR AA NOERROR
7 ADJUST copy_id
8 SECTION QUESTION
9 www IN A
10 SECTION ANSWER
11 www IN A 10.20.30.40
12 ENTRY_END
13
14 ENTRY_BEGIN
15 MATCH opcode qtype qname
16 REPLY QR AA SERVFAIL
17 ADJUST copy_id
18 SECTION QUESTION
19 www.example.net. IN A
20 ENTRY_END
21
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
21 -----END CERTIFICATE-----
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
21 -----END CERTIFICATE-----
0 server:
1 verbosity: 4
2 num-threads: 1
3 outgoing-range: 16
4 interface: 127.0.0.1
5 port: @PORT@
6 use-syslog: no
7 directory: ""
8 pidfile: "unbound.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 local-zone: "example.net." redirect
13 local-data: "example.net. IN A 10.20.30.41"
14 remote-control:
15 control-enable: yes
16 control-interface: 127.0.0.1
17 # control-interface: ::1
18 control-port: @CONTROL_PORT@
19 server-key-file: "unbound_server.key"
20 server-cert-file: "unbound_server.pem"
21 control-key-file: "unbound_control.key"
22 control-cert-file: "unbound_control.pem"
23 forward-zone:
24 name: "."
25 forward-addr: "127.0.0.1@@TOPORT@"
26 dnstap:
27 dnstap-enable: yes
28 dnstap-socket-path: "dnstap.socket"
29 dnstap-ip: "127.0.0.1@@TAPPORT@"
30 dnstap-tls: yes
31 dnstap-tls-server-name: "unbound"
32 # the actual tls cert bundle that authenticates the server
33 # is the unbound_server.pem bundle.
34 # we pass the wrong bundle. (of another key we also use in the client
35 # authentication test)
36 dnstap-tls-cert-bundle: "unbound_control.pem"
37 dnstap-send-identity: yes
38 dnstap-send-version: yes
39 #dnstap-identity
40 #dnstap-version
41 dnstap-log-resolver-query-messages: yes
42 dnstap-log-resolver-response-messages: yes
43 dnstap-log-client-query-messages: yes
44 dnstap-log-client-response-messages: yes
45 dnstap-log-forwarder-query-messages: yes
46 dnstap-log-forwarder-response-messages: yes
47
0 BaseName: dnstap_tls_badcert
1 Version: 1.0
2 Description: test dnstap tls with bad cert for authentication
3 CreationDate: Tue Feb 18 13:00:38 CET 2020
4 Maintainer: dr. W.C.A. Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: dnstap_tls_badcert.pre
11 Post: dnstap_tls_badcert.post
12 Test: dnstap_tls_badcert.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- dnstap_tls_badcert.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10 kill_pid $DNSTAP_SOCKET_PID
11 kill_pid $FWD_PID
12 kill $UNBOUND_PID
13 kill $UNBOUND_PID >/dev/null 2>&1
14 cat unbound.log
15 echo "> tap logfiles"
16 cat tap.log
17 cat tap.errlog
18 cat fwd.log
19 exit 0
0 # #-- dnstap_tls_badcert.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10
11 get_random_port 4
12 UNBOUND_PORT=$RND_PORT
13 FWD_PORT=$(($RND_PORT + 1))
14 CONTROL_PORT=$(($RND_PORT + 2))
15 TAP_PORT=$(($RND_PORT + 3))
16 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
17 echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
18 echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
19 echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test
20
21 # start forwarder
22 get_ldns_testns
23 $LDNS_TESTNS -p $FWD_PORT dnstap_tls_badcert.testns >fwd.log 2>&1 &
24 FWD_PID=$!
25 echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
26
27 # start the dnstap log server
28 # the -vvvv flag prints protocol and connection information from the
29 # unbound-dnstap-socket server.
30 # the -l flag prints the DNS info in the DNSTAP packet in multiline output.
31 # stderr is the '-vvvv' server logs and errors.
32 # stdout is the one-line packet logs (or with -l, multiline).
33 $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log &
34 if test $? -ne 0; then
35 echo "could not start unbound-dnstap-socket server"
36 exit 1
37 fi
38 DNSTAP_SOCKET_PID=$!
39 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
40 # wait for the server to go up
41 wait_server_up "tap.errlog" "start of service"
42
43 # make config file
44 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_badcert.conf > ub.conf
45 # start unbound in the background
46 $PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
47 UNBOUND_PID=$!
48 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
49
50 cat .tpkg.var.test
51 wait_ldns_testns_up fwd.log
52 wait_unbound_up unbound.log
53
0 # #-- dnstap_tls_badcert.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7 PRE="../.."
8 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9
10 # test if the server is up.
11 echo "> dig www.example.com."
12 dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
13 echo "> check answer"
14 if grep "10.20.30.40" outfile; then
15 echo "OK"
16 else
17 echo "> cat logfiles"
18 cat tap.log
19 cat tap.errlog
20 cat fwd.log
21 cat unbound.log
22 echo "Not OK"
23 exit 1
24 fi
25
26 echo "> check tap.log for dnstap info"
27 # see if it logged the information in tap.log
28 # wait for a moment for filesystem to catch up.
29 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
30 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
31 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
32 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
33 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
34 if grep "www.example.com" tap.log; then
35 echo "it is in tap.log";
36 echo "but there should not be a connection"
37 echo "failed"
38 echo "> cat logfiles"
39 cat tap.log
40 cat tap.errlog
41 cat fwd.log
42 cat unbound.log
43 echo "Not OK"
44 exit 1
45 else
46 echo "information not in tap.log"
47 fi
48
49 echo "> OK"
50 exit 0
0 ; nameserver test file
1 $ORIGIN example.com.
2 $TTL 3600
3
4 ENTRY_BEGIN
5 MATCH opcode qtype qname
6 REPLY QR AA NOERROR
7 ADJUST copy_id
8 SECTION QUESTION
9 www IN A
10 SECTION ANSWER
11 www IN A 10.20.30.40
12 ENTRY_END
13
14 ENTRY_BEGIN
15 MATCH opcode qtype qname
16 REPLY QR AA SERVFAIL
17 ADJUST copy_id
18 SECTION QUESTION
19 www.example.net. IN A
20 ENTRY_END
21
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
21 -----END CERTIFICATE-----
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
21 -----END CERTIFICATE-----
0 server:
1 verbosity: 4
2 num-threads: 1
3 outgoing-range: 16
4 interface: 127.0.0.1
5 port: @PORT@
6 use-syslog: no
7 directory: ""
8 pidfile: "unbound.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 local-zone: "example.net." redirect
13 local-data: "example.net. IN A 10.20.30.41"
14 remote-control:
15 control-enable: yes
16 control-interface: 127.0.0.1
17 # control-interface: ::1
18 control-port: @CONTROL_PORT@
19 server-key-file: "unbound_server.key"
20 server-cert-file: "unbound_server.pem"
21 control-key-file: "unbound_control.key"
22 control-cert-file: "unbound_control.pem"
23 forward-zone:
24 name: "."
25 forward-addr: "127.0.0.1@@TOPORT@"
26 dnstap:
27 dnstap-enable: yes
28 dnstap-socket-path: "dnstap.socket"
29 dnstap-ip: "127.0.0.1@@TAPPORT@"
30 dnstap-tls: yes
31 # actual certificate name: "unbound"
32 # we enter another name here.
33 dnstap-tls-server-name: "anothername"
34 dnstap-tls-cert-bundle: "unbound_server.pem"
35 dnstap-send-identity: yes
36 dnstap-send-version: yes
37 #dnstap-identity
38 #dnstap-version
39 dnstap-log-resolver-query-messages: yes
40 dnstap-log-resolver-response-messages: yes
41 dnstap-log-client-query-messages: yes
42 dnstap-log-client-response-messages: yes
43 dnstap-log-forwarder-query-messages: yes
44 dnstap-log-forwarder-response-messages: yes
45
0 BaseName: dnstap_tls_badname
1 Version: 1.0
2 Description: test dnstap tls test bad peer name for authentication
3 CreationDate: Tue Feb 18 13:00:38 CET 2020
4 Maintainer: dr. W.C.A. Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: dnstap_tls_badname.pre
11 Post: dnstap_tls_badname.post
12 Test: dnstap_tls_badname.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- dnstap_tls_badname.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10 kill_pid $DNSTAP_SOCKET_PID
11 kill_pid $FWD_PID
12 kill $UNBOUND_PID
13 kill $UNBOUND_PID >/dev/null 2>&1
14 cat unbound.log
15 echo "> tap logfiles"
16 cat tap.log
17 cat tap.errlog
18 cat fwd.log
19 exit 0
0 # #-- dnstap_tls_badname.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10
11 get_random_port 4
12 UNBOUND_PORT=$RND_PORT
13 FWD_PORT=$(($RND_PORT + 1))
14 CONTROL_PORT=$(($RND_PORT + 2))
15 TAP_PORT=$(($RND_PORT + 3))
16 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
17 echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
18 echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
19 echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test
20
21 # start forwarder
22 get_ldns_testns
23 $LDNS_TESTNS -p $FWD_PORT dnstap_tls_badname.testns >fwd.log 2>&1 &
24 FWD_PID=$!
25 echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
26
27 # start the dnstap log server
28 # the -vvvv flag prints protocol and connection information from the
29 # unbound-dnstap-socket server.
30 # the -l flag prints the DNS info in the DNSTAP packet in multiline output.
31 # stderr is the '-vvvv' server logs and errors.
32 # stdout is the one-line packet logs (or with -l, multiline).
33 $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log &
34 if test $? -ne 0; then
35 echo "could not start unbound-dnstap-socket server"
36 exit 1
37 fi
38 DNSTAP_SOCKET_PID=$!
39 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
40 # wait for the server to go up
41 wait_server_up "tap.errlog" "start of service"
42
43 # make config file
44 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_badname.conf > ub.conf
45 # start unbound in the background
46 $PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
47 UNBOUND_PID=$!
48 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
49
50 cat .tpkg.var.test
51 wait_ldns_testns_up fwd.log
52 wait_unbound_up unbound.log
53
0 # #-- dnstap_tls_badname.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7 PRE="../.."
8 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9
10 # test if the server is up.
11 echo "> dig www.example.com."
12 dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
13 echo "> check answer"
14 if grep "10.20.30.40" outfile; then
15 echo "OK"
16 else
17 echo "> cat logfiles"
18 cat tap.log
19 cat tap.errlog
20 cat fwd.log
21 cat unbound.log
22 echo "Not OK"
23 exit 1
24 fi
25
26 echo "> check tap.log for dnstap info"
27 # see if it logged the information in tap.log
28 # wait for a moment for filesystem to catch up.
29 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
30 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
31 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
32 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
33 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
34 if grep "www.example.com" tap.log; then
35 echo "it is in tap.log";
36 echo "but there should not be a connection"
37 echo "failed"
38 echo "> cat logfiles"
39 cat tap.log
40 cat tap.errlog
41 cat fwd.log
42 cat unbound.log
43 echo "Not OK"
44 exit 1
45 else
46 echo "information not in tap.log"
47 fi
48
49 echo "> OK"
50 exit 0
0 ; nameserver test file
1 $ORIGIN example.com.
2 $TTL 3600
3
4 ENTRY_BEGIN
5 MATCH opcode qtype qname
6 REPLY QR AA NOERROR
7 ADJUST copy_id
8 SECTION QUESTION
9 www IN A
10 SECTION ANSWER
11 www IN A 10.20.30.40
12 ENTRY_END
13
14 ENTRY_BEGIN
15 MATCH opcode qtype qname
16 REPLY QR AA SERVFAIL
17 ADJUST copy_id
18 SECTION QUESTION
19 www.example.net. IN A
20 ENTRY_END
21
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
21 -----END CERTIFICATE-----
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
21 -----END CERTIFICATE-----
0 server:
1 verbosity: 4
2 num-threads: 1
3 outgoing-range: 16
4 interface: 127.0.0.1
5 port: @PORT@
6 use-syslog: no
7 directory: ""
8 pidfile: "unbound.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 local-zone: "example.net." redirect
13 local-data: "example.net. IN A 10.20.30.41"
14 remote-control:
15 control-enable: yes
16 control-interface: 127.0.0.1
17 # control-interface: ::1
18 control-port: @CONTROL_PORT@
19 server-key-file: "unbound_server.key"
20 server-cert-file: "unbound_server.pem"
21 control-key-file: "unbound_control.key"
22 control-cert-file: "unbound_control.pem"
23 forward-zone:
24 name: "."
25 forward-addr: "127.0.0.1@@TOPORT@"
26 dnstap:
27 dnstap-enable: yes
28 dnstap-socket-path: "dnstap.socket"
29 dnstap-ip: "127.0.0.1@@TAPPORT@"
30 dnstap-tls: yes
31 dnstap-tls-server-name: "unbound"
32 dnstap-tls-cert-bundle: "unbound_server.pem"
33 dnstap-tls-client-key-file: "unbound_control.key"
34 dnstap-tls-client-cert-file: "unbound_control.pem"
35 dnstap-send-identity: yes
36 dnstap-send-version: yes
37 #dnstap-identity
38 #dnstap-version
39 dnstap-log-resolver-query-messages: yes
40 dnstap-log-resolver-response-messages: yes
41 dnstap-log-client-query-messages: yes
42 dnstap-log-client-response-messages: yes
43 dnstap-log-forwarder-query-messages: yes
44 dnstap-log-forwarder-response-messages: yes
45
0 BaseName: dnstap_tls_clientauth
1 Version: 1.0
2 Description: test dnstap tls with client authentication
3 CreationDate: Tue Feb 18 14:00:38 CET 2020
4 Maintainer: dr. W.C.A. Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: dnstap_tls_clientauth.pre
11 Post: dnstap_tls_clientauth.post
12 Test: dnstap_tls_clientauth.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- dnstap_tls_clientauth.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10 kill_pid $DNSTAP_SOCKET_PID
11 kill_pid $FWD_PID
12 kill $UNBOUND_PID
13 kill $UNBOUND_PID >/dev/null 2>&1
14 cat unbound.log
15 echo "> tap logfiles"
16 cat tap.log
17 cat tap.errlog
18 cat fwd.log
19 exit 0
0 # #-- dnstap_tls_clientauth.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10
11 get_random_port 4
12 UNBOUND_PORT=$RND_PORT
13 FWD_PORT=$(($RND_PORT + 1))
14 CONTROL_PORT=$(($RND_PORT + 2))
15 TAP_PORT=$(($RND_PORT + 3))
16 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
17 echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
18 echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
19 echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test
20
21 # start forwarder
22 get_ldns_testns
23 $LDNS_TESTNS -p $FWD_PORT dnstap_tls_clientauth.testns >fwd.log 2>&1 &
24 FWD_PID=$!
25 echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
26
27 # start the dnstap log server
28 # the -vvvv flag prints protocol and connection information from the
29 # unbound-dnstap-socket server.
30 # the -l flag prints the DNS info in the DNSTAP packet in multiline output.
31 # stderr is the '-vvvv' server logs and errors.
32 # stdout is the one-line packet logs (or with -l, multiline).
33 $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -z unbound_server.pem -l -vvvv 2>tap.errlog >tap.log &
34 if test $? -ne 0; then
35 echo "could not start unbound-dnstap-socket server"
36 exit 1
37 fi
38 DNSTAP_SOCKET_PID=$!
39 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
40 # wait for the server to go up
41 wait_server_up "tap.errlog" "start of service"
42
43 # make config file
44 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_clientauth.conf > ub.conf
45 # start unbound in the background
46 $PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
47 UNBOUND_PID=$!
48 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
49
50 cat .tpkg.var.test
51 wait_ldns_testns_up fwd.log
52 wait_unbound_up unbound.log
53
0 # #-- dnstap_tls_clientauth.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7 PRE="../.."
8 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9
10 # test if the server is up.
11 echo "> dig www.example.com."
12 dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
13 echo "> check answer"
14 if grep "10.20.30.40" outfile; then
15 echo "OK"
16 else
17 echo "> cat logfiles"
18 cat tap.log
19 cat tap.errlog
20 cat fwd.log
21 cat unbound.log
22 echo "Not OK"
23 exit 1
24 fi
25
26 echo "> check tap.log for dnstap info"
27 # see if it logged the information in tap.log
28 # wait for a moment for filesystem to catch up.
29 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
30 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
31 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
32 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
33 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
34 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi
35 if grep "www.example.com" tap.log; then echo "yes it is in tap.log";
36 else
37 echo "information not in tap.log"
38 echo "failed"
39 echo "> cat logfiles"
40 cat tap.log
41 cat tap.errlog
42 cat fwd.log
43 cat unbound.log
44 echo "Not OK"
45 exit 1
46 fi
47
48 echo "> OK"
49 exit 0
0 ; nameserver test file
1 $ORIGIN example.com.
2 $TTL 3600
3
4 ENTRY_BEGIN
5 MATCH opcode qtype qname
6 REPLY QR AA NOERROR
7 ADJUST copy_id
8 SECTION QUESTION
9 www IN A
10 SECTION ANSWER
11 www IN A 10.20.30.40
12 ENTRY_END
13
14 ENTRY_BEGIN
15 MATCH opcode qtype qname
16 REPLY QR AA SERVFAIL
17 ADJUST copy_id
18 SECTION QUESTION
19 www.example.net. IN A
20 ENTRY_END
21
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
21 -----END CERTIFICATE-----
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
21 -----END CERTIFICATE-----
0 server:
1 verbosity: 4
2 num-threads: 1
3 outgoing-range: 16
4 interface: 127.0.0.1
5 port: @PORT@
6 use-syslog: no
7 directory: ""
8 pidfile: "unbound.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 local-zone: "example.net." redirect
13 local-data: "example.net. IN A 10.20.30.41"
14 remote-control:
15 control-enable: yes
16 control-interface: 127.0.0.1
17 # control-interface: ::1
18 control-port: @CONTROL_PORT@
19 server-key-file: "unbound_server.key"
20 server-cert-file: "unbound_server.pem"
21 control-key-file: "unbound_control.key"
22 control-cert-file: "unbound_control.pem"
23 forward-zone:
24 name: "."
25 forward-addr: "127.0.0.1@@TOPORT@"
26 dnstap:
27 dnstap-enable: yes
28 dnstap-socket-path: "dnstap.socket"
29 dnstap-ip: "127.0.0.1@@TAPPORT@"
30 dnstap-tls: yes
31 dnstap-tls-server-name: "unbound"
32 dnstap-tls-cert-bundle: "unbound_server.pem"
33 dnstap-send-identity: yes
34 dnstap-send-version: yes
35 #dnstap-identity
36 #dnstap-version
37 dnstap-log-resolver-query-messages: yes
38 dnstap-log-resolver-response-messages: yes
39 dnstap-log-client-query-messages: yes
40 dnstap-log-client-response-messages: yes
41 dnstap-log-forwarder-query-messages: yes
42 dnstap-log-forwarder-response-messages: yes
43
0 BaseName: dnstap_tls_peername
1 Version: 1.0
2 Description: test dnstap tls with auth name and tls authentication
3 CreationDate: Tue Feb 14 14:00:38 CET 2020
4 Maintainer: dr. W.C.A. Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: dnstap_tls_peername.pre
11 Post: dnstap_tls_peername.post
12 Test: dnstap_tls_peername.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- dnstap_tls_peername.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10 kill_pid $DNSTAP_SOCKET_PID
11 kill_pid $FWD_PID
12 kill $UNBOUND_PID
13 kill $UNBOUND_PID >/dev/null 2>&1
14 cat unbound.log
15 echo "> tap logfiles"
16 cat tap.log
17 cat tap.errlog
18 cat fwd.log
19 exit 0
0 # #-- dnstap_tls_peername.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7
8 PRE="../.."
9 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10
11 get_random_port 4
12 UNBOUND_PORT=$RND_PORT
13 FWD_PORT=$(($RND_PORT + 1))
14 CONTROL_PORT=$(($RND_PORT + 2))
15 TAP_PORT=$(($RND_PORT + 3))
16 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
17 echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
18 echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
19 echo "TAP_PORT=$TAP_PORT" >> .tpkg.var.test
20
21 # start forwarder
22 get_ldns_testns
23 $LDNS_TESTNS -p $FWD_PORT dnstap_tls_peername.testns >fwd.log 2>&1 &
24 FWD_PID=$!
25 echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
26
27 # start the dnstap log server
28 # the -vvvv flag prints protocol and connection information from the
29 # unbound-dnstap-socket server.
30 # the -l flag prints the DNS info in the DNSTAP packet in multiline output.
31 # stderr is the '-vvvv' server logs and errors.
32 # stdout is the one-line packet logs (or with -l, multiline).
33 $PRE/unbound-dnstap-socket -t "127.0.0.1@$TAP_PORT" -x unbound_server.key -y unbound_server.pem -l -vvvv 2>tap.errlog >tap.log &
34 if test $? -ne 0; then
35 echo "could not start unbound-dnstap-socket server"
36 exit 1
37 fi
38 DNSTAP_SOCKET_PID=$!
39 echo "DNSTAP_SOCKET_PID=$DNSTAP_SOCKET_PID" >> .tpkg.var.test
40 # wait for the server to go up
41 wait_server_up "tap.errlog" "start of service"
42
43 # make config file
44 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@TAPPORT\@/'$TAP_PORT'/' < dnstap_tls_peername.conf > ub.conf
45 # start unbound in the background
46 $PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
47 UNBOUND_PID=$!
48 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
49
50 cat .tpkg.var.test
51 wait_ldns_testns_up fwd.log
52 wait_unbound_up unbound.log
53
0 # #-- dnstap_tls_peername.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7 PRE="../.."
8 if grep "define USE_DNSTAP 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9
10 # test if the server is up.
11 echo "> dig www.example.com."
12 dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
13 echo "> check answer"
14 if grep "10.20.30.40" outfile; then
15 echo "OK"
16 else
17 echo "> cat logfiles"
18 cat tap.log
19 cat tap.errlog
20 cat fwd.log
21 cat unbound.log
22 echo "Not OK"
23 exit 1
24 fi
25
26 echo "> check tap.log for dnstap info"
27 # see if it logged the information in tap.log
28 # wait for a moment for filesystem to catch up.
29 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
30 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
31 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
32 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
33 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 1; fi
34 if grep "www.example.com" tap.log >/dev/null; then :; else sleep 10; fi
35 if grep "www.example.com" tap.log; then echo "yes it is in tap.log";
36 else
37 echo "information not in tap.log"
38 echo "failed"
39 echo "> cat logfiles"
40 cat tap.log
41 cat tap.errlog
42 cat fwd.log
43 cat unbound.log
44 echo "Not OK"
45 exit 1
46 fi
47
48 echo "> OK"
49 exit 0
0 ; nameserver test file
1 $ORIGIN example.com.
2 $TTL 3600
3
4 ENTRY_BEGIN
5 MATCH opcode qtype qname
6 REPLY QR AA NOERROR
7 ADJUST copy_id
8 SECTION QUESTION
9 www IN A
10 SECTION ANSWER
11 www IN A 10.20.30.40
12 ENTRY_END
13
14 ENTRY_BEGIN
15 MATCH opcode qtype qname
16 REPLY QR AA SERVFAIL
17 ADJUST copy_id
18 SECTION QUESTION
19 www.example.net. IN A
20 ENTRY_END
21
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
21 -----END CERTIFICATE-----
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
21 -----END CERTIFICATE-----
0 server:
1 verbosity: 2
2 num-threads: 3
3 outgoing-range: 16
4 interface: 127.0.0.1
5 port: @PORT@
6 use-syslog: no
7 directory: ""
8 pidfile: "unbound.pid"
9 chroot: ""
10 username: ""
11 do-not-query-localhost: no
12 local-zone: "example.net." redirect
13 local-data: "example.net. IN A 10.20.30.41"
14 module-config: "dynlib iterator"
15
16 dynlib:
17 dynlib-file: "@DLL_FILE@"
18
19 remote-control:
20 control-enable: yes
21 control-interface: 127.0.0.1
22 # control-interface: ::1
23 control-port: @CONTROL_PORT@
24 server-key-file: "unbound_server.key"
25 server-cert-file: "unbound_server.pem"
26 control-key-file: "unbound_control.key"
27 control-cert-file: "unbound_control.pem"
28
29 forward-zone:
30 name: "."
31 forward-addr: "127.0.0.1@@TOPORT@"
0 BaseName: dynlibmod
1 Version: 1.0
2 Description: test dynlibmod module
3 CreationDate: Tue May 19 15:00:38 CET 2020
4 Maintainer: dr. W.C.A. Wijngaards
5 Category:
6 Component:
7 CmdDepends:
8 Depends:
9 Help:
10 Pre: dynlibmod.pre
11 Post: dynlibmod.post
12 Test: dynlibmod.test
13 AuxFiles:
14 Passed:
15 Failure:
0 # #-- dynlibmod.post --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # source the test var file when it's there
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5 #
6 # do your teardown here
7 . ../common.sh
8 PRE="../.."
9 if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10 kill_pid $FWD_PID
11 kill $UNBOUND_PID
12 kill $UNBOUND_PID >/dev/null 2>&1
13 cat unbound.log
14 exit 0
0 # #-- dynlibmod.pre--#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7
8 PRE="../.."
9 if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
10
11 get_random_port 3
12 UNBOUND_PORT=$RND_PORT
13 FWD_PORT=$(($RND_PORT + 1))
14 CONTROL_PORT=$(($RND_PORT + 2))
15 echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test
16 echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test
17 echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test
18
19 # start forwarder
20 get_ldns_testns
21 $LDNS_TESTNS -p $FWD_PORT dynlibmod.testns >fwd.log 2>&1 &
22 FWD_PID=$!
23 echo "FWD_PID=$FWD_PID" >> .tpkg.var.test
24
25 # make config file
26 if grep "define USE_WINSOCK 1" $PRE/config.h; then
27 DLL_FILE="helloworld.dll"
28 else
29 DLL_FILE="helloworld.so"
30 fi
31 sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' -e 's/@DLL_FILE\@/'$DLL_FILE'/' < dynlibmod.conf > ub.conf
32
33 cat .tpkg.var.test
34 wait_ldns_testns_up fwd.log
0 # #-- dynlibmod.test --#
1 # source the master var file when it's there
2 [ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
3 # use .tpkg.var.test for in test variable passing
4 [ -f .tpkg.var.test ] && source .tpkg.var.test
5
6 . ../common.sh
7 PRE="../.."
8 if grep "define WITH_DYNLIBMODULE 1" $PRE/config.h; then echo test enabled; else echo test skipped; exit 0; fi
9
10 # compile the dynamic library module
11 if grep "define USE_WINSOCK 1" $PRE/config.h; then
12 echo "compile dynamic library dll for mingw"
13 echo "x86_64-w64-mingw32-gcc -m64 -I$PRE -shared -Wall -fpic -o helloworld.dll $PRE/dynlibmod/examples/helloworld.c -L../.. -l:libunbound.a"
14 x86_64-w64-mingw32-gcc -m64 -I$PRE -shared -Wall -fpic -o helloworld.dll $PRE/dynlibmod/examples/helloworld.c -L../.. -l:libunbound.a
15 if test $? != 0; then
16 echo "compile failure"
17 exit 1;
18 fi
19 else
20 echo "compile dynamic library"
21 echo "gcc -I$PRE -shared -Wall -fpic -o helloworld.so $PRE/dynlibmod/examples/helloworld.c"
22 gcc -I$PRE -shared -Wall -fpic -o helloworld.so $PRE/dynlibmod/examples/helloworld.c
23 if test $? != 0; then
24 echo "compile failure"
25 exit 1;
26 fi
27 fi
28
29 # start unbound in the background
30 LD_LIBRARY_PATH="." $PRE/unbound -d -c ub.conf >unbound.log 2>&1 &
31 UNBOUND_PID=$!
32 echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test
33 wait_unbound_up unbound.log
34
35 # test if the server is up.
36 echo "> dig www.example.com."
37 dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
38 echo "> check answer"
39 if grep "10.20.30.40" outfile; then
40 echo "OK"
41 else
42 echo "> cat logfiles"
43 cat fwd.log
44 cat unbound.log
45 echo "Not OK"
46 exit 1
47 fi
48
49 echo "> check log for dynlibmod info"
50 # wait for a moment for filesystem to catch up.
51 if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi
52 if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi
53 if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi
54 if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi
55 if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi
56 if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 1; fi
57 if grep "hello world from operate" unbound.log >/dev/null; then :; else sleep 10; fi
58 if grep "hello world from operate" unbound.log; then echo "yes it is in unbound.log";
59 else
60 echo "information not in unbound.log"
61 echo "failed"
62 echo "> cat logfiles"
63 cat fwd.log
64 cat unbound.log
65 echo "Not OK"
66 exit 1
67 fi
68
69 echo "> cat logfiles"
70 cat fwd.log
71 cat unbound.log
72 echo "> OK"
73 exit 0
0 ; nameserver test file
1 $ORIGIN example.com.
2 $TTL 3600
3
4 ENTRY_BEGIN
5 MATCH opcode qtype qname
6 REPLY QR AA NOERROR
7 ADJUST copy_id
8 SECTION QUESTION
9 www IN A
10 SECTION ANSWER
11 www IN A 10.20.30.40
12 ENTRY_END
13
14 ENTRY_BEGIN
15 MATCH opcode qtype qname
16 REPLY QR AA SERVFAIL
17 ADJUST copy_id
18 SECTION QUESTION
19 www.example.net. IN A
20 ENTRY_END
21
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
21 -----END CERTIFICATE-----
0 -----BEGIN RSA PRIVATE KEY-----
1 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
38 -----END RSA PRIVATE KEY-----
0 -----BEGIN CERTIFICATE-----
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
21 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE
3 AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD
4 6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3
5 qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US
6 J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB
7 BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B
8 9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC
9 iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
3 AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
4 y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
5 /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
6 g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
7 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
8 l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
9 Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
1021 -----END CERTIFICATE-----
99 username: ""
1010 do-not-query-localhost: no
1111 minimal-responses: no
12 rrset-roundrobin: no
1213 forward-zone:
1314 name: "."
1415 forward-addr: "127.0.0.1@@TOPORT@"
33 target-fetch-policy: "0 0 0 0 0"
44 qname-minimisation: "no"
55 minimal-responses: no
6 rrset-roundrobin: no
67
78 stub-zone:
89 name: "."
11 server:
22 target-fetch-policy: "0 0 0 0 0"
33 minimal-responses: no
4 rrset-roundrobin: no
45
56 stub-zone:
67 name: "."
22 target-fetch-policy: "3 2 1 0 0"
33 qname-minimisation: "no"
44 minimal-responses: no
5 rrset-roundrobin: no
56
67 stub-zone:
78 name: "."
11 server:
22 target-fetch-policy: "0 0 0 0 0"
33 minimal-responses: no
4 rrset-roundrobin: no
45
56 stub-zone:
67 name: "."
11 server:
22 target-fetch-policy: "0 0 0 0 0"
33 minimal-responses: no
4 rrset-roundrobin: no
45
56 stub-zone:
67 name: "."
11 server:
22 target-fetch-policy: "0 0 0 0 0"
33 minimal-responses: no
4 rrset-roundrobin: no
45
56 stub-zone:
67 name: "."
22 target-fetch-policy: "0 0 0 0 0"
33 qname-minimisation: "no"
44 minimal-responses: no
5 rrset-roundrobin: no
56
67 stub-zone:
78 name: "."
11 server:
22 target-fetch-policy: "0 0 0 0 0"
33 minimal-responses: no
4 rrset-roundrobin: no
45
56 stub-zone:
67 name: "."
33 hide-version: no
44 identity: "test-identity"
55 version: "test-version"
6 rrset-roundrobin: no
67
78 ; implicit transparent zone should not block id.server
89 local-data: "mydata.server. CH A 10.11.12.13"
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE
3 AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD
4 6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3
5 qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US
6 J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB
7 BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B
8 9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC
9 iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA
2 3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s
3 RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB
4 AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS
5 6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds
6 sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi
7 XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3
8 fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL
9 CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP
10 0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2
11 oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l
12 In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S
13 LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg==
1 MIIG5AIBAAKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI
2 0x41iG32a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+Nqq
3 GRS7XVQ24vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Z
4 uh9MDgotaBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8K
5 WaBe1ca4TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5
6 FzUReSXZuTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xP
7 q6O9UPj4+nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XL
8 A5UoZgRzXgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP
9 7kFZSngxdy1+A/bNAgMBAAECggGBALpTOIqQwVg4CFBylL/a8K1IWJTI/I65sklf
10 XxYL7G7SB2HlEJ//z+E+F0+S4Vlao1vyLQ5QkgE82pAUB8FoMWvY1qF0Y8A5wtm6
11 iZSGk4OLK488ZbT8Ii9i+AGKgPe2XbVxsJwj8N4k7Zooqec9hz73Up8ATEWJkRz7
12 2u7oMGG4z91E0PULA64dOi3l/vOQe5w/Aa+CwVbAWtI05o7kMvQEBMDJn6C7CByo
13 MB5op9wueJMnz7PM7hns+U7Dy6oE4ljuolJUy51bDzFWwoM54cRoQqLFNHd8JVQj
14 WxldCkbfF43iyprlsEcUrTyUjtdA+ZeiG39vg/mtdmgNpGmdupHJZQvSuG8IcVlz
15 O+eMSeQS1QXPD6Ik8UK4SU0h+zOl8xIWtRrsxQuh4fnTN40udm/YUWl/6gOebsBI
16 IrVLlKGqJSfB3tMjpCRqdTzJ0dA9keVpkqm2ugZkxEf1+/efq/rFIQ2pUBLCqNTN
17 qpNqruK8y8FphP30I2uI4Ej2UIB8AQKBwQDd2Yptj2FyDyaXCycsyde0wYkNyzGU
18 dRnzdibfHnMZwjgTjwAwgIUBVIS8H0/z7ZJQKN7osJfddMrtjJtYYUk9g/dCpHXs
19 bNh2QSoWah3FdzNGuWd0iRf9+LFxhjAAMo/FS8zFJAJKrFsBdCGTfFUMdsLC0bjr
20 YjiWBuvV72uKf8XIZX5KIZruKdWBBcWukcb21R1UDyFYyXRBsly5XHaIYKZql3km
21 7pV7MKWO0IYgHbHIqGUqPQlzZ/lkunS1jKECgcEA23wHffD6Ou9/x3okPx2AWpTr
22 gh8rgqbyo6hQkBW5Y90Wz824cqaYebZDaBR/xlVx/YwjKkohv8Bde2lpH/ZxRZ1Z
23 5Sk2s6GJ/vU0L9RsJZgCgj4L6Coal1NMxuZtCXAlnOpiCdxSZgfqbshbTVz30KsG
24 ZJG361Cua1ScdAHxlZBxT52/1Sm0zRC2hnxL7h4qo7Idmtzs40LAJvYOKekR0pPN
25 oWeJfra7vgx/jVNvMFWoOoSLpidVO4g+ot4ery6tAoHAdW3rCic1C2zdnmH28Iw+
26 s50l8Lk3mz+I5wgJd1zkzCO0DxZIoWPGA3g7cmCYr6N3KRsZMs4W9NAXgjpFGDkW
27 zYsG3K21BdpvkdjYcFjnPVjlOXB2RIc0vehf9Jl02wXoeCSxVUDEPcaRvWk9RJYx
28 ZpGOchUU7vNkxHURbIJ4yCzuAi9G8/Jp0dsu+kaV5tufF5SjG5WOrzKjaQsCbdN1
29 oqaWMCHRrTvov/Z2C+xwsptFOdN5CSyZzg6hQiI4GMlBAoHAXyb6KINcOEi0YMp3
30 BFXJ23tMTnEs78tozcKeipigcsbaqORK3omS+NEnj+uzKUzJyl4CsMbKstK2tFYS
31 mSTCHqgE3PBtIpsZtEqhgUraR8IK9GPpzZDTTl9ynZgwFTNlWw3RyuyVXF56J+T8
32 kCGJ3hEHCHqT/ZRQyX85BKIDFhA0z4tYKxWVqIFiYBNq56R0X9tMMmMs36mEnF93
33 7Ht6mowxTZQRa7nU0qOgeKh/P7ki4Zus3y+WJ+T9IqahLtlRAoHBAIhqMrcxSAB8
34 RpB9jukJlAnidw2jCMPgrFE8tP0khhVvGrXMldxAUsMKntDIo8dGCnG1KTcWDI0O
35 jepvSPHSsxVLFugL79h0eVIS5z4huW48i9xgU8VlHdgAcgEPIAOFcOw2BCu/s0Vp
36 O+MM/EyUOdo3NsibB3qc/GJI6iNBYS7AljYEVo6rXo5V/MZvZUF4vClen6Obzsre
37 MTTb+4sJjfqleWuvr1XNMeu2mBfXBQkWGZP1byBK0MvD/aQ2PWq92A==
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
3 AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
4 y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
5 /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
6 g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
7 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
8 l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
9 Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
1021 -----END CERTIFICATE-----
22 module-config: "respip validator iterator"
33 target-fetch-policy: "0 0 0 0 0"
44 qname-minimisation: no
5 rrset-roundrobin: no
56
67 rpz:
78 name: "rpz.example.com."
22 module-config: "respip validator iterator"
33 target-fetch-policy: "0 0 0 0 0"
44 qname-minimisation: no
5 rrset-roundrobin: no
56
67 rpz:
78 name: "rpz.example.com."
11 ; config options go here.
22 server:
33 minimal-responses: no
4 rrset-roundrobin: no
45 forward-zone: name: "." forward-addr: 216.0.0.1
56 CONFIG_END
67
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
3 AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
4 y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
5 /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
6 g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
7 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
8 l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
9 Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
3 AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
4 y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
5 /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
6 g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
7 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
8 l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
9 Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE
3 AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD
4 6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3
5 qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US
6 J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB
7 BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B
8 9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC
9 iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq
1 MIIDszCCAhsCFGD5193whHQ2bVdzbaQfdf1gc4SkMA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjMwWhcNNDAwMzI1MTMzMjMw
3 WjAaMRgwFgYDVQQDDA91bmJvdW5kLWNvbnRyb2wwggGiMA0GCSqGSIb3DQEBAQUA
4 A4IBjwAwggGKAoIBgQCy0Sn4/KHxcau1nvsDgWFiO9t4Hd0xrtDasZbGhvOUD2mv
5 OEDVoKEC9S0I4C4z6sHo1M0HxhZ9kltAdrDIw2mYLvtyDq9ctgIZRAdnICqJ03Tj
6 1EkXlPuPg3xWeK/XsuJF2vRLqzDLg9G8Scg89XjcRAdmoLmNW8ewqSEh+YEX8OPl
7 NdHKl5rBZX+bmN5Tr/gdFgx/K0Fl07WY9e5YuHSWBtDhIJuCs5RUPeueIyTXJkht
8 A6a+UMdip6SMNv+85bYrFRAsbThpkwnWZZ91vAbQIpCRKMhIQNnWXvq+EzqZMzR/
9 Bdsi/IVn3I88KV7WYXlpKXFLZyYa4ZVJFBrDxcX197dr0AIklOvfcd1KnJpmQpEB
10 TMtwqosKXfbd1oq/c3DABPTdOPiJAzjXoBIyiLJ8Vr/YZZMpBWN127wKtqvu0Zp/
11 nGuWKDgMGasG91gDeePLvb9EPvWEvCaVGgIZTt1G4Ov07ooBJSbVGL3U41n+p2My
12 +i/XmXa+PgZX4pdHTR0CAwEAATANBgkqhkiG9w0BAQsFAAOCAYEAd++Wen6l8Ifj
13 4h3p/y16PhSsWJWuJ4wdNYy3/GM84S26wGjzlEEwiW76HpH6VJzPOiBAeWnFKE83
14 hFyetEIxgJeIPbcs9ZP/Uoh8GZH9tRISBSN9Hgk2Slr9llo4t1H0g/XTgA5HqMQU
15 9YydlBh43G7Vw3FVwh09OM6poNOGQKNc/tq2/QdKeUMtyBbLWpRmjH5XcCT35fbn
16 ZiVOUldqSHD4kKrFO4nJYXZyipRbcXybsLiX9GP0GLemc3IgIvOXyJ2RPp06o/SJ
17 pzlMlkcAfLJaSuEW57xRakhuNK7m051TKKzJzIEX+NFYOVdafFHS8VwGrYsdrFvD
18 72tMfu+Fu55y3awdWWGc6YlaGogZiuMnJkvQphwgn+5qE/7CGEckoKEsH601rqIZ
19 muaIc85+nEcHJeijd/ZlBN9zeltjFoMuqTUENgmv8+tUAdVm/UMY9Vjme6b43ydP
20 uv6DS02+k9z8toxXworLiPr94BGaiGV1NxgwZKLZigYJt/Fi2Qte
1021 -----END CERTIFICATE-----
00 -----BEGIN RSA PRIVATE KEY-----
1 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
1438 -----END RSA PRIVATE KEY-----
00 -----BEGIN CERTIFICATE-----
1 MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1
2 bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE
3 AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS
4 y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/
5 /jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu
6 g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ
7 9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG
8 l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH
9 Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg==
1 MIIDqzCCAhMCFBHWXeQ6ZIa9QcQbXLFfC6tj+KA+MA0GCSqGSIb3DQEBCwUAMBIx
2 EDAOBgNVBAMMB3VuYm91bmQwHhcNMjAwNzA4MTMzMjI5WhcNNDAwMzI1MTMzMjI5
3 WjASMRAwDgYDVQQDDAd1bmJvdW5kMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
4 igKCAYEAvjSVSN2QMXudpzukdLCqgg/IOhCX8KYkD0FFFfWcQjgKq5wI0x41iG32
5 a6wbGanre4IX7VxaSPu9kkHfnGgynCk5nwDRedE/FLFhAU78PoT0+NqqGRS7XVQ2
6 4vLmIz9Hqc2Ozx1um1BXBTmIT0UfN2e22I0LWQ6a3seZlEDRj45gnk7Zuh9MDgot
7 aBdm+v1JAbupSf6Zis4VEH3JNdvVGE3O1DHEIeuuz/3BDhpf6WBDH+8KWaBe1ca4
8 TZHr9ThL2gEMEfAQl0wXDwRWRoi3NjNMH+mw0L1rjwThI5GXqNIee7o5FzUReSXZ
9 uTdFMyGe3Owcx+XoYnwi6cplSNoGsDBu4B9bKKglR9YleJVw4L4Xi8xPq6O9UPj4
10 +nypHk/DOoC7DIM3ufN0yxPBsFo5TVowxfhdjZXJbbftd2TZv7AH8+XLA5UoZgRz
11 XgzECelXSCTBFlMTnT48LfA9pMLydyjAz2UdPHs5Iv+TK5nnI+aJoeaP7kFZSngx
12 dy1+A/bNAgMBAAEwDQYJKoZIhvcNAQELBQADggGBABunf93MKaCUHiZgnoOTinsW
13 84/EgInrgtKzAyH+BhnKkJOhhR0kkIAx5d9BpDlaSiRTACFon9moWCgDIIsK/Ar7
14 JE0Kln9cV//wiiNoFU0O4mnzyGUIMvlaEX6QHMJJQYvL05+w/3AAcf5XmMJtR5ca
15 fJ8FqvGC34b2WxX9lTQoyT52sRt+1KnQikiMEnEyAdKktMG+MwKsFDdOwDXyZhZg
16 XZhRrfX3/NVJolqB6EahjWIGXDeKuSSKZVtCyib6LskyeMzN5lcRfvubKDdlqFVF
17 qlD7rHBsKhQUWK/IO64mGf7y/de+CgHtED5vDvr/p2uj/9sABATfbrOQR3W/Of25
18 sLBj4OEfrJ7lX8hQgFaxkMI3x6VFT3W8dTCp7xnQgb6bgROWB5fNEZ9jk/gjSRmD
19 yIU+r0UbKe5kBk/CmZVFXL2TyJ92V5NYEQh8V4DGy19qZ6u/XKYyNJL4ocs35GGe
20 CA8SBuyrmdhx38h1RHErR2Skzadi1S7MwGf1y431fQ==
1021 -----END CERTIFICATE-----
66 qname-minimisation: "no"
77 fake-sha1: yes
88 trust-anchor-signaling: no
9 rrset-roundrobin: no
910
1011 stub-zone:
1112 name: "."
66 qname-minimisation: "no"
77 fake-sha1: yes
88 trust-anchor-signaling: no
9 rrset-roundrobin: no
910
1011 stub-zone:
1112 name: "."
00 ; config options
11 server:
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
33 val-override-date: "20120420235959"
44 target-fetch-policy: "0 0 0 0 0"
55 qname-minimisation: "no"
66 fake-sha1: yes
77 trust-anchor-signaling: no
88 minimal-responses: no
9 rrset-roundrobin: no
910
1011 stub-zone:
1112 name: "."
00 ; config options
11 server:
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
33 val-override-date: "20120420235959"
44 target-fetch-policy: "0 0 0 0 0"
55 qname-minimisation: "no"
66 fake-sha1: yes
77 trust-anchor-signaling: no
88 minimal-responses: no
9 rrset-roundrobin: no
910
1011 stub-zone:
1112 name: "."
00 ; config options
11 server:
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
33 val-override-date: "20120420235959"
44 target-fetch-policy: "0 0 0 0 0"
55 qname-minimisation: "no"
66 fake-sha1: yes
77 trust-anchor-signaling: no
8 rrset-roundrobin: no
89
910 stub-zone:
1011 name: "."
00 ; config options
11 server:
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
33 val-override-date: "20120420235959"
44 target-fetch-policy: "0 0 0 0 0"
55 qname-minimisation: "no"
00 ; config options
11 server:
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
33 val-override-date: "20120420235959"
44 target-fetch-policy: "0 0 0 0 0"
55 qname-minimisation: "no"
66 fake-sha1: yes
77 trust-anchor-signaling: no
8 rrset-roundrobin: no
89
910 stub-zone:
1011 name: "."
00 ; config options
11 server:
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
33 val-override-date: "20120420235959"
44 target-fetch-policy: "0 0 0 0 0"
55 qname-minimisation: "no"
00 ; config options
11 server:
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
33 val-override-date: "20120420235959"
44 target-fetch-policy: "0 0 0 0 0"
55 qname-minimisation: "no"
00 ; config options
11 server:
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
33 val-override-date: "20120420235959"
44 target-fetch-policy: "0 0 0 0 0"
55 qname-minimisation: "no"
00 ; config options
11 server:
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
2 trust-anchor: "example. DNSKEY 257 3 7 AwEAAcUlFV1vhmqx6NSOUOq2R/dsR7Xm3upJ ( j7IommWSpJABVfW8Q0rOvXdM6kzt+TAu92L9 AbsUdblMFin8CVF3n4s= )"
33 val-override-date: "20120420235959"
44 target-fetch-policy: "0 0 0 0 0"
55 qname-minimisation: "no"
66 qname-minimisation: "no"
77 fake-sha1: yes
88 trust-anchor-signaling: no
9 rrset-roundrobin: no
910
1011 stub-zone:
1112 name: "."
66 qname-minimisation: "no"
77 fake-sha1: yes
88 trust-anchor-signaling: no
9 rrset-roundrobin: no
910
1011 stub-zone:
1112 name: "."
88 qname-minimisation: "no"
99 fake-sha1: yes
1010 trust-anchor-signaling: no
11 rrset-roundrobin: no
1112
1213 stub-zone:
1314 name: "."
99 fake-sha1: yes
1010 trust-anchor-signaling: no
1111 minimal-responses: no
12 rrset-roundrobin: no
1213
1314 stub-zone:
1415 name: "."
44 fake-sha1: yes
55 trust-anchor-signaling: no
66 minimal-responses: no
7 rrset-roundrobin: no
78
89 forward-zone:
910 name: "."
115115 cfg->ssl_upstream = 0;
116116 cfg->tls_cert_bundle = NULL;
117117 cfg->tls_win_cert = 0;
118 cfg->tls_use_sni = 1;
118119 cfg->use_syslog = 1;
119120 cfg->log_identity = NULL; /* changed later with argv[0] */
120121 cfg->log_time_ascii = 0;
185186 cfg->so_reuseport = REUSEPORT_DEFAULT;
186187 cfg->ip_transparent = 0;
187188 cfg->ip_freebind = 0;
189 cfg->ip_dscp = 0;
188190 cfg->num_ifs = 0;
189191 cfg->ifs = NULL;
190192 cfg->num_out_ifs = 0;
265267 cfg->unblock_lan_zones = 0;
266268 cfg->insecure_lan_zones = 0;
267269 cfg->python_script = NULL;
270 cfg->dynlib_file = NULL;
268271 cfg->remote_control_enable = 0;
269272 cfg->control_ifs.first = NULL;
270273 cfg->control_ifs.last = NULL;
271274 cfg->control_port = UNBOUND_CONTROL_PORT;
272275 cfg->control_use_cert = 1;
273276 cfg->minimal_responses = 1;
274 cfg->rrset_roundrobin = 0;
277 cfg->rrset_roundrobin = 1;
275278 cfg->unknown_server_time_limit = 376;
276279 cfg->max_udp_size = 4096;
277280 if(!(cfg->server_key_file = strdup(RUN_DIR"/unbound_server.key")))
294297 if(!(cfg->dnstap_socket_path = strdup(DNSTAP_SOCKET_PATH)))
295298 goto error_exit;
296299 #endif
300 cfg->dnstap_bidirectional = 1;
301 cfg->dnstap_tls = 1;
297302 cfg->disable_dnssec_lame_check = 0;
298303 cfg->ip_ratelimit = 0;
299304 cfg->ratelimit = 0;
334339 if(!(cfg->redis_server_host = strdup("127.0.0.1"))) goto error_exit;
335340 cfg->redis_timeout = 100;
336341 cfg->redis_server_port = 6379;
342 cfg->redis_expire_records = 0;
337343 #endif /* USE_REDIS */
338344 #endif /* USE_CACHEDB */
339345 #ifdef USE_IPSET
503509 else S_STRLIST_APPEND("tls-session-ticket-keys:", tls_session_ticket_keys)
504510 else S_STR("tls-ciphers:", tls_ciphers)
505511 else S_STR("tls-ciphersuites:", tls_ciphersuites)
512 else S_YNO("tls-use-sni:", tls_use_sni)
506513 else S_YNO("interface-automatic:", if_automatic)
507514 else S_YNO("use-systemd:", use_systemd)
508515 else S_YNO("do-daemonize:", do_daemonize)
522529 else S_YNO("so-reuseport:", so_reuseport)
523530 else S_YNO("ip-transparent:", ip_transparent)
524531 else S_YNO("ip-freebind:", ip_freebind)
532 else S_NUMBER_OR_ZERO("ip-dscp:", ip_dscp)
525533 else S_MEMSIZE("rrset-cache-size:", rrset_cache_size)
526534 else S_POW2("rrset-cache-slabs:", rrset_cache_slabs)
527535 else S_YNO("prefetch:", prefetch)
621629 else S_STR("control-cert-file:", control_cert_file)
622630 else S_STR("module-config:", module_conf)
623631 else S_STRLIST("python-script:", python_script)
632 else S_STRLIST("dynlib-file:", dynlib_file)
624633 else S_YNO("disable-dnssec-lame-check:", disable_dnssec_lame_check)
625634 #ifdef CLIENT_SUBNET
626635 /* Can't set max subnet prefix here, since that value is used when
630639 #endif
631640 #ifdef USE_DNSTAP
632641 else S_YNO("dnstap-enable:", dnstap)
642 else S_YNO("dnstap-bidirectional:", dnstap_bidirectional)
633643 else S_STR("dnstap-socket-path:", dnstap_socket_path)
644 else S_STR("dnstap-ip:", dnstap_ip)
645 else S_YNO("dnstap-tls:", dnstap_tls)
646 else S_STR("dnstap-tls-server-name:", dnstap_tls_server_name)
647 else S_STR("dnstap-tls-cert-bundle:", dnstap_tls_cert_bundle)
648 else S_STR("dnstap-tls-client-key-file:", dnstap_tls_client_key_file)
649 else S_STR("dnstap-tls-client-cert-file:",
650 dnstap_tls_client_cert_file)
634651 else S_YNO("dnstap-send-identity:", dnstap_send_identity)
635652 else S_YNO("dnstap-send-version:", dnstap_send_version)
636653 else S_STR("dnstap-identity:", dnstap_identity)
914931 else O_YNO(opt, "so-reuseport", so_reuseport)
915932 else O_YNO(opt, "ip-transparent", ip_transparent)
916933 else O_YNO(opt, "ip-freebind", ip_freebind)
934 else O_DEC(opt, "ip-dscp", ip_dscp)
917935 else O_MEM(opt, "rrset-cache-size", rrset_cache_size)
918936 else O_DEC(opt, "rrset-cache-slabs", rrset_cache_slabs)
919937 else O_YNO(opt, "prefetch-key", prefetch_key)
948966 else O_LST(opt, "tls-session-ticket-keys", tls_session_ticket_keys.first)
949967 else O_STR(opt, "tls-ciphers", tls_ciphers)
950968 else O_STR(opt, "tls-ciphersuites", tls_ciphersuites)
969 else O_YNO(opt, "tls-use-sni", tls_use_sni)
951970 else O_YNO(opt, "use-systemd", use_systemd)
952971 else O_YNO(opt, "do-daemonize", do_daemonize)
953972 else O_STR(opt, "chroot", chrootdir)
10371056 #endif
10381057 #ifdef USE_DNSTAP
10391058 else O_YNO(opt, "dnstap-enable", dnstap)
1059 else O_YNO(opt, "dnstap-bidirectional", dnstap_bidirectional)
10401060 else O_STR(opt, "dnstap-socket-path", dnstap_socket_path)
1061 else O_STR(opt, "dnstap-ip", dnstap_ip)
1062 else O_YNO(opt, "dnstap-tls", dnstap_tls)
1063 else O_STR(opt, "dnstap-tls-server-name", dnstap_tls_server_name)
1064 else O_STR(opt, "dnstap-tls-cert-bundle", dnstap_tls_cert_bundle)
1065 else O_STR(opt, "dnstap-tls-client-key-file",
1066 dnstap_tls_client_key_file)
1067 else O_STR(opt, "dnstap-tls-client-cert-file",
1068 dnstap_tls_client_cert_file)
10411069 else O_YNO(opt, "dnstap-send-identity", dnstap_send_identity)
10421070 else O_YNO(opt, "dnstap-send-version", dnstap_send_version)
10431071 else O_STR(opt, "dnstap-identity", dnstap_identity)
10751103 else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones)
10761104 else O_DEC(opt, "max-udp-size", max_udp_size)
10771105 else O_LST(opt, "python-script", python_script)
1106 else O_LST(opt, "dynlib-file", dynlib_file)
10781107 else O_YNO(opt, "disable-dnssec-lame-check", disable_dnssec_lame_check)
10791108 else O_DEC(opt, "ip-ratelimit", ip_ratelimit)
10801109 else O_DEC(opt, "ratelimit", ratelimit)
11151144 else O_STR(opt, "redis-server-host", redis_server_host)
11161145 else O_DEC(opt, "redis-server-port", redis_server_port)
11171146 else O_DEC(opt, "redis-timeout", redis_timeout)
1147 else O_YNO(opt, "redis-expire-records", redis_expire_records)
11181148 #endif /* USE_REDIS */
11191149 #endif /* USE_CACHEDB */
11201150 #ifdef USE_IPSET
14571487 free(cfg->dns64_prefix);
14581488 config_delstrlist(cfg->dns64_ignore_aaaa);
14591489 free(cfg->dnstap_socket_path);
1490 free(cfg->dnstap_ip);
1491 free(cfg->dnstap_tls_server_name);
1492 free(cfg->dnstap_tls_cert_bundle);
1493 free(cfg->dnstap_tls_client_key_file);
1494 free(cfg->dnstap_tls_client_cert_file);
14601495 free(cfg->dnstap_identity);
14611496 free(cfg->dnstap_version);
14621497 config_deldblstrlist(cfg->ratelimit_for_domain);
14631498 config_deldblstrlist(cfg->ratelimit_below_domain);
14641499 config_delstrlist(cfg->python_script);
1500 config_delstrlist(cfg->dynlib_file);
14651501 #ifdef USE_IPSECMOD
14661502 free(cfg->ipsecmod_hook);
14671503 config_delstrlist(cfg->ipsecmod_whitelist);
15081544 cfg_mark_ports(const char* str, int allow, int* avail, int num)
15091545 {
15101546 char* mid = strchr(str, '-');
1547 #ifdef DISABLE_EXPLICIT_PORT_RANDOMISATION
1548 log_warn("Explicit port randomisation disabled, ignoring "
1549 "outgoing-port-permit and outgoing-port-avoid configuration "
1550 "options");
1551 #endif
15111552 if(!mid) {
15121553 int port = atoi(str);
15131554 if(port == 0 && strcmp(str, "0") != 0) {
8484 int do_ip4;
8585 /** do ip6 query support. */
8686 int do_ip6;
87 /** prefer ip4 upstream queries. */
88 int prefer_ip4;
8789 /** prefer ip6 upstream queries. */
8890 int prefer_ip6;
8991 /** do udp query support. */
125127 char* tls_ciphers;
126128 /** TLS chiphersuites (TLSv1.3) */
127129 char* tls_ciphersuites;
130 /** if SNI is to be used */
131 int tls_use_sni;
128132
129133 /** outgoing port range number of ports (per thread) */
130134 int outgoing_num_ports;
185189 int ip_transparent;
186190 /** IP_FREEBIND socket option request on port 53 sockets */
187191 int ip_freebind;
192 /** IP_TOS socket option requested on port 53 sockets */
193 int ip_dscp;
188194
189195 /** number of interfaces to open. If 0 default all interfaces. */
190196 int num_ifs;
443449 /** Python script file */
444450 struct config_strlist* python_script;
445451
452 /** Dynamic library file */
453 struct config_strlist* dynlib_file;
454
446455 /** Use systemd socket activation. */
447456 int use_systemd;
448457
471480
472481 /** true to enable dnstap support */
473482 int dnstap;
483 /** using bidirectional frame streams if true */
484 int dnstap_bidirectional;
474485 /** dnstap socket path */
475486 char* dnstap_socket_path;
487 /** dnstap IP */
488 char* dnstap_ip;
489 /** dnstap TLS enable */
490 int dnstap_tls;
491 /** dnstap tls server authentication name */
492 char* dnstap_tls_server_name;
493 /** dnstap server cert bundle */
494 char* dnstap_tls_cert_bundle;
495 /** dnstap client key for client authentication */
496 char* dnstap_tls_client_key_file;
497 /** dnstap client cert for client authentication */
498 char* dnstap_tls_client_cert_file;
476499 /** true to send "identity" via dnstap */
477500 int dnstap_send_identity;
478501 /** true to send "version" via dnstap */
581604 int redis_server_port;
582605 /** timeout (in ms) for communication with the redis server */
583606 int redis_timeout;
607 /** set timeout on redis records based on DNS response ttl */
608 int redis_expire_records;
584609 #endif
585610 #endif
586611
353353 (yy_hold_char) = *yy_cp; \
354354 *yy_cp = '\0'; \
355355 (yy_c_buf_p) = yy_cp;
356 #define YY_NUM_RULES 302
357 #define YY_END_OF_BUFFER 303
356 #define YY_NUM_RULES 323
357 #define YY_END_OF_BUFFER 324
358358 /* This struct is not used in this scanner,
359359 but its presence is necessary. */
360360 struct yy_trans_info
362362 flex_int32_t yy_verify;
363363 flex_int32_t yy_nxt;
364364 };
365 static const flex_int16_t yy_accept[2986] =
365 static const flex_int16_t yy_accept[3137] =
366366 { 0,
367 1, 1, 284, 284, 288, 288, 292, 292, 296, 296,
368 1, 1, 303, 300, 1, 282, 282, 301, 2, 300,
369 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
370 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
371 300, 301, 284, 285, 285, 286, 301, 288, 289, 289,
372 290, 301, 295, 292, 293, 293, 294, 301, 296, 297,
373 297, 298, 301, 299, 283, 2, 287, 299, 301, 300,
374 0, 1, 2, 2, 2, 2, 300, 300, 300, 300,
375 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
376 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
377
378 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
379 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
380 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
381 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
382 284, 0, 288, 0, 295, 0, 292, 296, 0, 299,
383 0, 2, 2, 299, 300, 300, 300, 300, 300, 300,
384 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
385 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
386 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
387 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
388
389 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
390 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
391 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
392 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
393 300, 300, 300, 299, 300, 300, 300, 300, 300, 300,
394 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
395 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
396 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
397 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
398 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
399
400 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
401 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
402 300, 300, 300, 300, 112, 300, 300, 300, 300, 300,
403 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
404 300, 300, 300, 300, 300, 120, 300, 300, 300, 300,
405 300, 300, 300, 299, 300, 300, 300, 300, 300, 300,
406 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
407 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
408 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
409 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
410
411 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
412 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
413 300, 300, 300, 300, 300, 300, 300, 300, 96, 300,
414 300, 300, 300, 300, 300, 8, 300, 300, 300, 300,
415 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
416 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
417 300, 300, 300, 300, 113, 300, 300, 300, 300, 300,
418 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
419 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
420 300, 300, 300, 300, 125, 300, 299, 300, 300, 300,
421
422 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
423 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
424 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
425 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
426 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
427 300, 300, 300, 300, 277, 300, 300, 300, 300, 300,
428 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
429 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
430 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
431 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
432
433 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
434 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
435 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
436 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
437 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
438 300, 300, 300, 300, 299, 300, 300, 300, 300, 300,
439 300, 300, 300, 300, 300, 300, 54, 300, 300, 300,
440 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
441 300, 222, 300, 14, 15, 300, 18, 17, 300, 300,
442 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
443
444 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
445 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
446 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
447 300, 119, 300, 300, 300, 300, 300, 300, 300, 300,
448 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
449 300, 300, 206, 300, 300, 300, 300, 300, 300, 300,
450 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
451 3, 300, 300, 300, 300, 300, 300, 300, 300, 300,
452 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
453 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
454
455 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
456 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
457 300, 300, 300, 299, 300, 300, 300, 300, 300, 300,
458 300, 272, 300, 300, 271, 300, 300, 300, 300, 300,
459 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
460 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
461 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
462 300, 300, 300, 300, 300, 300, 300, 300, 300, 291,
463 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
464 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
465
466 300, 300, 300, 57, 300, 246, 300, 300, 300, 300,
467 300, 300, 300, 300, 278, 279, 300, 300, 300, 300,
468 300, 58, 300, 300, 300, 300, 300, 300, 300, 300,
469 300, 300, 300, 300, 300, 300, 300, 116, 300, 300,
470 300, 300, 300, 300, 300, 300, 195, 300, 300, 300,
471 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
472 300, 300, 300, 300, 300, 300, 300, 20, 300, 300,
473 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
474 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
475 300, 300, 300, 300, 300, 144, 300, 300, 291, 300,
476
477 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
478 300, 300, 300, 300, 300, 300, 300, 300, 300, 94,
479 300, 300, 300, 300, 300, 300, 300, 254, 300, 300,
480 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
481 167, 300, 300, 300, 300, 300, 300, 300, 300, 300,
482 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
483 300, 300, 300, 143, 300, 300, 300, 300, 300, 300,
484 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
485 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
486 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
487
488 300, 300, 300, 300, 93, 300, 300, 300, 300, 300,
489 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
490 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
491 300, 31, 300, 300, 300, 300, 300, 300, 300, 300,
492 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
493 300, 32, 300, 300, 300, 300, 300, 300, 300, 300,
494 300, 300, 300, 300, 300, 55, 300, 300, 300, 300,
495 300, 300, 300, 300, 300, 118, 300, 300, 300, 300,
496 300, 111, 300, 300, 300, 300, 300, 300, 300, 300,
497 300, 300, 300, 300, 300, 300, 56, 300, 300, 300,
498
499 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
500 300, 300, 300, 300, 300, 300, 300, 300, 168, 300,
501 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
502 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
503 300, 300, 300, 300, 300, 300, 300, 45, 300, 300,
504 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
505 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
506 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
507 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
508 300, 300, 300, 300, 300, 300, 237, 300, 300, 300,
509
510 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
511 300, 300, 300, 300, 49, 300, 50, 300, 300, 300,
512 300, 300, 97, 300, 98, 300, 300, 300, 300, 95,
513 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
514 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
515 300, 300, 300, 300, 300, 300, 300, 7, 300, 300,
516 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
517 300, 300, 300, 300, 300, 300, 215, 300, 300, 300,
518 300, 146, 300, 300, 300, 300, 300, 300, 300, 300,
519 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
520
521 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
522 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
523 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
524 300, 46, 300, 300, 300, 300, 300, 300, 300, 300,
525 300, 300, 300, 300, 300, 187, 300, 186, 300, 300,
526 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
527 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
528 300, 300, 300, 300, 16, 300, 300, 300, 300, 300,
529 300, 300, 300, 300, 300, 300, 300, 59, 300, 300,
530 300, 300, 300, 300, 300, 300, 300, 300, 300, 194,
531
532 300, 300, 300, 300, 300, 300, 100, 300, 99, 300,
533 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
534 300, 300, 300, 300, 300, 300, 300, 300, 300, 178,
535 300, 300, 300, 300, 300, 300, 300, 300, 126, 300,
536 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
537 300, 300, 300, 300, 300, 300, 300, 300, 78, 300,
538 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
539 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
540 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
541 300, 300, 300, 300, 300, 300, 300, 300, 82, 300,
542
543 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
544 300, 300, 53, 300, 300, 300, 300, 300, 300, 300,
545 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
546 181, 182, 300, 300, 300, 248, 300, 300, 300, 300,
547 300, 300, 300, 300, 300, 300, 300, 300, 6, 300,
548 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
549 300, 300, 300, 300, 300, 300, 300, 300, 300, 252,
550 300, 300, 300, 300, 300, 300, 273, 300, 300, 300,
551 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
552 300, 300, 300, 300, 300, 300, 300, 41, 300, 300,
553
554 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
555 43, 300, 300, 300, 300, 300, 300, 300, 300, 174,
556 300, 300, 300, 121, 300, 300, 300, 300, 300, 300,
557 300, 300, 300, 300, 199, 300, 175, 300, 300, 300,
558 212, 300, 300, 300, 300, 300, 300, 300, 300, 300,
559 300, 300, 300, 300, 300, 300, 300, 44, 300, 300,
560 300, 300, 300, 300, 300, 300, 300, 123, 105, 300,
561 106, 300, 300, 300, 104, 300, 300, 300, 300, 300,
562 300, 300, 300, 141, 300, 300, 300, 300, 300, 300,
563 300, 300, 300, 300, 300, 236, 300, 300, 300, 300,
564
565 300, 300, 300, 300, 176, 300, 300, 300, 300, 300,
566 179, 300, 185, 300, 300, 300, 300, 300, 211, 300,
567 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
568 300, 300, 300, 92, 300, 300, 300, 300, 300, 300,
569 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
570 300, 117, 300, 300, 300, 300, 300, 300, 51, 300,
571 300, 300, 25, 300, 300, 300, 300, 300, 300, 300,
572 300, 300, 19, 300, 300, 300, 300, 300, 300, 26,
573 35, 300, 151, 300, 300, 300, 300, 300, 300, 300,
574 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
575
576 300, 300, 67, 69, 300, 300, 300, 300, 300, 300,
577 300, 300, 300, 300, 300, 300, 300, 256, 300, 300,
578 300, 223, 300, 300, 300, 300, 300, 300, 300, 300,
579 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
580 107, 300, 300, 300, 300, 300, 300, 300, 300, 300,
581 140, 300, 300, 300, 300, 300, 300, 300, 300, 300,
582 300, 300, 300, 300, 300, 300, 267, 300, 300, 300,
583 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
584 300, 300, 300, 300, 300, 145, 300, 300, 300, 300,
585 300, 300, 300, 300, 300, 300, 300, 300, 300, 205,
586
587 300, 300, 300, 300, 300, 300, 300, 300, 276, 300,
588 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
589 162, 300, 300, 300, 300, 300, 300, 300, 300, 101,
590 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
591 300, 300, 300, 300, 300, 300, 300, 300, 300, 157,
592 300, 169, 300, 300, 300, 300, 300, 129, 300, 300,
593 300, 300, 300, 88, 300, 300, 300, 300, 197, 300,
594 300, 300, 300, 300, 300, 213, 300, 300, 300, 300,
595 300, 300, 300, 300, 300, 300, 300, 300, 228, 300,
596 300, 300, 300, 300, 300, 300, 300, 300, 122, 300,
597
598 300, 300, 300, 300, 300, 300, 300, 300, 300, 161,
599 300, 300, 300, 300, 300, 70, 71, 300, 300, 300,
600 300, 300, 52, 300, 300, 300, 300, 300, 77, 170,
601 300, 188, 300, 216, 300, 300, 180, 249, 300, 300,
602 300, 300, 300, 63, 300, 172, 300, 300, 300, 300,
603 300, 9, 300, 300, 300, 91, 300, 300, 300, 300,
604 241, 300, 300, 300, 196, 300, 300, 300, 300, 300,
605 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
606 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
607 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
608
609 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
610 300, 300, 300, 300, 160, 300, 300, 300, 300, 300,
611 300, 300, 300, 300, 300, 147, 300, 255, 300, 300,
612 300, 300, 227, 300, 300, 300, 300, 300, 300, 300,
613 300, 207, 300, 300, 300, 300, 247, 300, 300, 300,
614 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
615 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
616 300, 270, 300, 171, 300, 300, 300, 300, 300, 300,
617 300, 62, 64, 300, 300, 300, 300, 300, 300, 300,
618 90, 300, 300, 300, 300, 239, 300, 300, 300, 251,
619
620 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
621 300, 201, 33, 27, 29, 300, 300, 300, 300, 300,
622 300, 300, 300, 300, 34, 300, 28, 30, 300, 300,
623 300, 300, 300, 300, 300, 300, 87, 300, 300, 300,
624 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
625 300, 300, 300, 300, 203, 200, 300, 300, 300, 300,
626 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
627 61, 300, 300, 124, 300, 108, 300, 300, 300, 300,
628 300, 300, 300, 300, 142, 13, 300, 300, 300, 300,
629 300, 300, 300, 300, 300, 265, 300, 268, 300, 300,
630
631 300, 300, 300, 300, 300, 300, 300, 300, 12, 300,
632 300, 21, 300, 300, 300, 245, 300, 300, 300, 253,
633 300, 300, 300, 65, 300, 209, 300, 300, 300, 300,
634 202, 300, 300, 60, 300, 300, 300, 300, 22, 300,
635 42, 300, 300, 300, 300, 300, 300, 300, 300, 300,
636 300, 300, 300, 156, 155, 300, 300, 300, 300, 300,
637 300, 300, 300, 300, 204, 198, 300, 214, 300, 300,
638 257, 300, 300, 300, 300, 300, 300, 300, 300, 300,
639 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
640 300, 300, 300, 300, 300, 72, 300, 300, 300, 240,
641
642 300, 300, 300, 300, 184, 300, 300, 300, 300, 208,
643 300, 300, 300, 300, 300, 300, 300, 300, 274, 275,
644 153, 300, 300, 66, 300, 300, 300, 300, 163, 300,
645 300, 102, 103, 300, 300, 300, 300, 148, 300, 150,
646 300, 189, 300, 300, 300, 300, 154, 300, 300, 217,
647 300, 300, 300, 300, 300, 300, 300, 131, 300, 300,
648 300, 300, 300, 300, 300, 300, 300, 300, 300, 224,
649 300, 300, 300, 23, 300, 250, 300, 300, 300, 300,
650 300, 300, 300, 300, 300, 300, 300, 190, 300, 300,
651 238, 300, 269, 300, 183, 300, 300, 300, 300, 47,
652
653 300, 300, 300, 300, 4, 300, 300, 300, 115, 130,
654 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
655 300, 300, 300, 300, 300, 300, 300, 300, 220, 36,
656 37, 300, 300, 300, 300, 300, 300, 300, 258, 300,
657 300, 300, 300, 300, 300, 226, 300, 300, 300, 193,
658 300, 300, 300, 300, 300, 300, 300, 300, 300, 75,
659 300, 48, 244, 300, 221, 300, 300, 300, 300, 11,
660 300, 300, 300, 300, 300, 114, 300, 300, 300, 300,
661 191, 79, 300, 39, 300, 300, 300, 300, 300, 300,
662 300, 300, 159, 300, 300, 300, 300, 300, 133, 300,
663
664 300, 300, 300, 300, 300, 300, 300, 300, 225, 127,
665 300, 300, 109, 110, 300, 300, 300, 81, 85, 80,
666 300, 73, 300, 300, 300, 300, 300, 10, 300, 300,
667 300, 242, 300, 300, 300, 300, 281, 38, 300, 300,
668 300, 300, 300, 158, 300, 300, 300, 300, 300, 300,
669 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
670 300, 300, 86, 84, 300, 74, 266, 300, 300, 300,
671 300, 300, 300, 300, 177, 300, 300, 300, 300, 300,
672 192, 300, 300, 300, 300, 300, 300, 300, 300, 149,
673 68, 300, 300, 300, 300, 300, 259, 300, 300, 300,
674
675 300, 300, 300, 300, 128, 300, 83, 134, 135, 138,
676 139, 136, 137, 76, 300, 243, 300, 300, 300, 300,
677 152, 300, 300, 300, 300, 300, 219, 300, 300, 300,
678 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
679 300, 300, 165, 164, 40, 300, 300, 300, 300, 300,
680 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
681 300, 300, 300, 300, 300, 300, 300, 89, 300, 218,
682 300, 235, 263, 300, 300, 300, 300, 300, 300, 300,
683 300, 300, 300, 5, 300, 300, 210, 300, 300, 264,
684 300, 300, 300, 300, 300, 300, 300, 300, 24, 300,
685
686 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
687 300, 300, 300, 300, 132, 300, 300, 300, 300, 300,
688 300, 300, 300, 166, 300, 173, 300, 300, 300, 300,
689 300, 300, 300, 300, 300, 260, 300, 300, 300, 300,
690 300, 300, 300, 300, 300, 300, 300, 300, 300, 300,
691 300, 300, 300, 280, 300, 300, 231, 300, 300, 300,
692 300, 300, 261, 300, 300, 300, 300, 300, 300, 262,
693 300, 300, 300, 229, 300, 232, 233, 300, 300, 300,
694 300, 300, 230, 234, 0
367 1, 1, 297, 297, 301, 301, 305, 305, 309, 309,
368 1, 1, 313, 313, 317, 317, 324, 321, 1, 295,
369 295, 322, 2, 321, 321, 321, 321, 321, 321, 321,
370 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
371 321, 321, 321, 321, 321, 322, 297, 298, 298, 299,
372 322, 301, 302, 302, 303, 322, 308, 305, 306, 306,
373 307, 322, 309, 310, 310, 311, 322, 320, 296, 2,
374 300, 320, 322, 316, 313, 314, 314, 315, 322, 317,
375 318, 318, 319, 322, 321, 0, 1, 2, 2, 2,
376 2, 321, 321, 321, 321, 321, 321, 321, 321, 321,
377
378 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
379 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
380 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
381 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
382 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
383 321, 321, 321, 321, 321, 321, 297, 0, 301, 0,
384 308, 0, 305, 309, 0, 320, 0, 2, 2, 320,
385 316, 0, 313, 317, 0, 321, 321, 321, 321, 321,
386 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
387 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
388
389 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
390 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
391 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
392 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
393 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
394 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
395 321, 321, 321, 321, 321, 320, 321, 321, 321, 321,
396 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
397 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
398 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
399
400 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
401 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
402 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
403 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
404 321, 321, 321, 321, 321, 321, 321, 321, 115, 321,
405 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
406 321, 321, 321, 321, 321, 321, 321, 321, 321, 123,
407 321, 321, 321, 321, 321, 321, 321, 320, 321, 321,
408 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
409 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
410
411 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
412 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
413 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
414 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
415 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
416 321, 321, 321, 321, 99, 321, 321, 321, 321, 321,
417 321, 8, 321, 321, 321, 321, 321, 321, 321, 321,
418 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
419 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
420 116, 321, 321, 321, 321, 321, 321, 321, 321, 321,
421
422 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
423 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
424 128, 321, 320, 321, 321, 321, 321, 321, 321, 321,
425 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
426 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
427 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
428 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
429 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
430 321, 321, 290, 321, 321, 321, 321, 321, 321, 321,
431 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
432
433 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
434 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
435 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
436 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
437 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
438 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
439 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
440 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
441 321, 321, 321, 320, 321, 321, 321, 321, 321, 321,
442 321, 321, 321, 321, 321, 57, 321, 321, 321, 321,
443
444 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
445 227, 321, 14, 15, 321, 19, 18, 321, 321, 211,
446 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
447 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
448 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
449 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
450 321, 321, 321, 122, 321, 321, 321, 321, 321, 321,
451 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
452 321, 321, 321, 321, 209, 321, 321, 321, 321, 321,
453 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
454
455 321, 321, 321, 3, 321, 321, 321, 321, 321, 321,
456 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
457 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
458 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
459 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
460 321, 321, 321, 321, 321, 321, 321, 320, 321, 321,
461 321, 321, 321, 321, 321, 284, 321, 321, 283, 321,
462 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
463 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
464 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
465
466 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
467 321, 321, 321, 321, 321, 321, 321, 304, 321, 321,
468 321, 321, 321, 321, 321, 56, 321, 321, 321, 321,
469 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
470 321, 321, 60, 321, 258, 321, 321, 321, 321, 321,
471 321, 321, 321, 291, 292, 321, 321, 321, 321, 321,
472 61, 321, 321, 321, 321, 321, 321, 321, 321, 321,
473 321, 321, 321, 321, 321, 321, 321, 119, 321, 321,
474 321, 321, 321, 321, 321, 321, 198, 321, 321, 321,
475 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
476
477 321, 321, 321, 321, 321, 321, 321, 21, 321, 321,
478 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
479 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
480 321, 321, 321, 321, 321, 321, 147, 321, 321, 320,
481 304, 321, 321, 321, 321, 321, 321, 321, 321, 321,
482 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
483 321, 97, 321, 321, 321, 321, 321, 321, 321, 266,
484 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
485 321, 321, 321, 321, 321, 321, 170, 321, 321, 321,
486 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
487
488 321, 321, 321, 321, 321, 321, 321, 321, 321, 146,
489 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
490 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
491 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
492 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
493 321, 96, 321, 321, 321, 321, 321, 321, 321, 321,
494 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
495 321, 321, 321, 321, 321, 321, 321, 321, 321, 32,
496 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
497 321, 321, 321, 321, 321, 321, 321, 321, 321, 33,
498
499 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
500 321, 321, 321, 321, 58, 321, 321, 321, 321, 321,
501 321, 321, 321, 321, 121, 320, 321, 321, 321, 321,
502 321, 114, 321, 321, 321, 321, 321, 321, 321, 321,
503 321, 321, 321, 321, 321, 321, 59, 321, 321, 321,
504 321, 321, 321, 321, 321, 321, 321, 321, 321, 231,
505 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
506 321, 321, 171, 321, 321, 321, 321, 321, 321, 321,
507 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
508 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
509
510 321, 321, 47, 321, 321, 321, 321, 321, 321, 321,
511 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
512 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
513 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
514 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
515 321, 321, 249, 321, 321, 321, 321, 321, 321, 321,
516 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
517 321, 51, 321, 52, 321, 321, 321, 321, 321, 100,
518 321, 101, 321, 321, 321, 321, 98, 321, 321, 321,
519 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
520
521 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
522 321, 321, 321, 321, 321, 7, 321, 320, 321, 321,
523 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
524 321, 321, 321, 321, 321, 220, 321, 321, 321, 321,
525 149, 321, 321, 321, 321, 321, 321, 321, 321, 321,
526 321, 321, 321, 321, 321, 321, 321, 232, 321, 321,
527 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
528 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
529 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
530 321, 321, 321, 321, 321, 48, 321, 321, 321, 321,
531
532 321, 321, 321, 321, 321, 321, 321, 321, 321, 190,
533 321, 189, 321, 321, 321, 321, 321, 321, 321, 321,
534 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
535 321, 321, 321, 321, 321, 321, 321, 321, 16, 17,
536 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
537 321, 321, 321, 62, 321, 321, 321, 321, 321, 321,
538 321, 321, 321, 321, 321, 197, 321, 321, 321, 321,
539 321, 321, 103, 321, 102, 321, 321, 321, 321, 321,
540 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
541 321, 321, 321, 321, 321, 321, 181, 321, 321, 321,
542
543 321, 321, 321, 321, 321, 129, 320, 321, 321, 321,
544 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
545 321, 321, 321, 321, 321, 321, 81, 321, 321, 321,
546 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
547 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
548 321, 321, 210, 321, 321, 321, 321, 321, 321, 321,
549 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
550 85, 321, 321, 321, 321, 321, 321, 321, 321, 321,
551 321, 321, 321, 321, 321, 55, 321, 321, 321, 321,
552 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
553
554 321, 321, 321, 184, 185, 321, 321, 321, 260, 321,
555 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
556 321, 6, 321, 321, 321, 321, 321, 321, 321, 321,
557 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
558 321, 321, 321, 264, 321, 321, 321, 321, 321, 321,
559 285, 321, 321, 321, 321, 321, 321, 321, 321, 321,
560 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
561 321, 42, 321, 321, 321, 321, 44, 321, 321, 321,
562 321, 321, 321, 321, 321, 45, 321, 321, 321, 321,
563 321, 321, 321, 320, 321, 177, 321, 321, 321, 124,
564
565 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
566 202, 321, 178, 321, 321, 321, 217, 321, 321, 321,
567 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
568 321, 321, 321, 321, 321, 321, 321, 46, 321, 321,
569 321, 321, 321, 321, 321, 321, 321, 126, 108, 321,
570 109, 321, 321, 321, 107, 321, 321, 321, 321, 321,
571 321, 321, 321, 144, 321, 321, 321, 321, 321, 321,
572 321, 321, 321, 321, 321, 321, 248, 321, 321, 321,
573 321, 321, 321, 321, 321, 179, 321, 321, 321, 321,
574 321, 182, 321, 188, 321, 321, 321, 321, 321, 216,
575
576 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
577 321, 321, 321, 321, 95, 321, 321, 321, 321, 321,
578 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
579 321, 321, 321, 120, 321, 321, 321, 321, 321, 321,
580 53, 321, 321, 321, 26, 321, 321, 321, 321, 321,
581 321, 321, 321, 321, 20, 321, 321, 321, 321, 321,
582 321, 27, 36, 321, 154, 321, 321, 321, 321, 321,
583 321, 321, 321, 321, 321, 321, 321, 321, 320, 321,
584 321, 321, 321, 321, 321, 70, 72, 321, 321, 321,
585 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
586
587 268, 321, 321, 321, 321, 228, 321, 321, 321, 321,
588 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
589 321, 321, 321, 321, 321, 321, 321, 110, 321, 321,
590 321, 321, 321, 321, 321, 321, 321, 143, 321, 321,
591 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
592 321, 321, 321, 321, 279, 321, 321, 321, 321, 321,
593 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
594 321, 321, 321, 148, 321, 321, 321, 321, 321, 321,
595 321, 321, 321, 321, 321, 321, 321, 208, 321, 321,
596 321, 321, 321, 321, 321, 321, 321, 288, 321, 321,
597
598 321, 321, 321, 321, 321, 321, 321, 321, 321, 165,
599 321, 321, 321, 321, 321, 321, 321, 321, 104, 321,
600 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
601 321, 321, 321, 321, 321, 321, 321, 321, 160, 321,
602 172, 321, 321, 321, 321, 320, 321, 132, 321, 321,
603 321, 321, 321, 91, 321, 321, 321, 321, 200, 321,
604 321, 321, 321, 321, 321, 218, 321, 321, 321, 321,
605 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
606 321, 321, 240, 321, 321, 321, 321, 321, 321, 321,
607 321, 321, 125, 321, 321, 321, 321, 321, 321, 321,
608
609 321, 321, 321, 164, 321, 321, 321, 321, 321, 321,
610 73, 74, 321, 321, 321, 321, 321, 54, 321, 321,
611 321, 321, 321, 80, 173, 321, 191, 321, 221, 321,
612 321, 183, 261, 321, 321, 321, 321, 321, 66, 321,
613 175, 321, 321, 321, 321, 321, 9, 321, 321, 321,
614 94, 321, 321, 321, 321, 253, 321, 321, 321, 321,
615 199, 321, 321, 321, 321, 321, 321, 321, 321, 321,
616 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
617 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
618 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
619
620 321, 321, 321, 321, 321, 321, 320, 321, 321, 321,
621 321, 163, 321, 321, 321, 321, 321, 321, 321, 321,
622 321, 321, 150, 321, 267, 321, 321, 321, 321, 321,
623 239, 321, 321, 321, 321, 321, 321, 321, 321, 321,
624 321, 321, 212, 321, 321, 321, 321, 259, 321, 321,
625 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
626 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
627 321, 321, 321, 282, 321, 174, 321, 321, 321, 321,
628 321, 321, 321, 65, 67, 321, 321, 321, 321, 321,
629 321, 321, 93, 321, 321, 321, 321, 251, 321, 321,
630
631 321, 321, 263, 321, 321, 321, 321, 321, 321, 321,
632 321, 321, 321, 321, 204, 34, 28, 30, 321, 321,
633 321, 321, 321, 321, 321, 321, 321, 35, 321, 29,
634 31, 321, 321, 321, 321, 321, 321, 321, 321, 90,
635 321, 321, 321, 321, 321, 321, 320, 321, 321, 321,
636 321, 321, 321, 321, 321, 321, 321, 321, 206, 203,
637 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
638 321, 321, 321, 321, 321, 321, 321, 321, 64, 321,
639 321, 127, 321, 111, 321, 321, 321, 321, 321, 321,
640 321, 321, 145, 312, 13, 321, 321, 321, 321, 321,
641
642 321, 321, 321, 321, 277, 321, 280, 321, 321, 321,
643 321, 321, 321, 321, 321, 321, 321, 12, 321, 321,
644 22, 321, 321, 321, 257, 321, 321, 321, 321, 265,
645 321, 321, 321, 68, 321, 214, 321, 321, 321, 321,
646 205, 321, 321, 63, 321, 321, 321, 321, 23, 321,
647 43, 321, 321, 321, 321, 321, 321, 321, 321, 321,
648 321, 321, 321, 159, 158, 312, 321, 321, 321, 321,
649 321, 321, 321, 321, 321, 207, 201, 321, 219, 321,
650 321, 269, 321, 321, 321, 321, 321, 321, 321, 321,
651 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
652
653 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
654 75, 321, 321, 321, 252, 321, 321, 321, 321, 187,
655 321, 321, 321, 321, 213, 321, 321, 321, 321, 321,
656 321, 321, 321, 321, 286, 287, 156, 321, 321, 69,
657 321, 321, 321, 321, 166, 321, 321, 105, 106, 321,
658 321, 321, 321, 151, 321, 153, 321, 192, 321, 321,
659 321, 321, 157, 321, 321, 222, 321, 321, 321, 321,
660 321, 321, 321, 134, 321, 321, 321, 321, 321, 321,
661 321, 321, 321, 321, 321, 321, 230, 321, 321, 321,
662 321, 321, 321, 321, 24, 321, 262, 321, 321, 321,
663
664 321, 321, 321, 321, 321, 321, 321, 321, 193, 321,
665 321, 250, 321, 281, 321, 186, 321, 321, 321, 321,
666 49, 321, 321, 321, 321, 4, 321, 321, 321, 321,
667 118, 133, 321, 321, 321, 321, 321, 321, 321, 321,
668 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
669 225, 37, 38, 321, 321, 321, 321, 321, 321, 321,
670 270, 321, 321, 321, 321, 321, 321, 321, 238, 321,
671 321, 321, 321, 321, 321, 321, 196, 321, 321, 321,
672 321, 321, 321, 321, 321, 321, 78, 321, 50, 256,
673 321, 226, 321, 321, 321, 321, 11, 321, 321, 321,
674
675 321, 321, 321, 117, 321, 321, 321, 321, 194, 82,
676 321, 40, 321, 321, 321, 321, 321, 321, 321, 321,
677 162, 321, 321, 321, 321, 321, 136, 321, 321, 321,
678 321, 229, 321, 321, 321, 321, 321, 237, 321, 321,
679 321, 321, 130, 321, 321, 112, 113, 321, 321, 321,
680 84, 88, 83, 321, 76, 321, 321, 321, 321, 321,
681 10, 321, 321, 321, 254, 289, 321, 321, 321, 321,
682 294, 39, 321, 321, 321, 321, 321, 161, 321, 321,
683 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
684 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
685
686 89, 87, 321, 77, 278, 321, 321, 321, 321, 321,
687 321, 321, 180, 321, 321, 321, 321, 321, 195, 321,
688 321, 321, 321, 321, 321, 321, 321, 152, 71, 321,
689 321, 321, 321, 321, 271, 321, 321, 321, 321, 321,
690 321, 321, 234, 321, 321, 233, 131, 321, 86, 137,
691 138, 141, 142, 139, 140, 79, 321, 255, 321, 321,
692 321, 321, 155, 321, 321, 321, 321, 321, 224, 321,
693 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
694 321, 321, 321, 321, 321, 321, 168, 167, 41, 321,
695 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
696
697 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
698 321, 321, 321, 92, 321, 223, 321, 247, 275, 321,
699 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
700 321, 5, 321, 321, 215, 321, 321, 276, 321, 321,
701 321, 321, 321, 321, 321, 321, 321, 235, 25, 321,
702 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
703 321, 236, 321, 321, 321, 135, 321, 321, 321, 321,
704 321, 321, 321, 321, 169, 321, 176, 321, 321, 321,
705 321, 321, 321, 321, 321, 321, 272, 321, 321, 321,
706 321, 321, 321, 321, 321, 321, 321, 321, 321, 321,
707
708 321, 321, 321, 321, 293, 321, 321, 243, 321, 321,
709 321, 321, 321, 273, 321, 321, 321, 321, 321, 321,
710 274, 321, 321, 321, 241, 321, 244, 245, 321, 321,
711 321, 321, 321, 242, 246, 0
695712 } ;
696713
697714 static const YY_CHAR yy_ec[256] =
737754 1, 1, 1, 1, 1, 1
738755 } ;
739756
740 static const flex_int16_t yy_base[3000] =
757 static const flex_int16_t yy_base[3155] =
741758 { 0,
742759 0, 0, 64, 67, 70, 72, 78, 84, 89, 92,
743 131, 137, 508, 418, 96, 8475, 8475, 8475, 109, 171,
744 85, 142, 215, 83, 117, 152, 207, 50, 110, 75,
745 167, 231, 112, 275, 121, 327, 368, 243, 258, 259,
746 170, 321, 382, 8475, 8475, 8475, 104, 341, 8475, 8475,
747 8475, 147, 337, 362, 8475, 8475, 8475, 342, 295, 8475,
748 8475, 8475, 160, 291, 8475, 355, 8475, 177, 346, 201,
749 371, 115, 0, 386, 0, 0, 160, 162, 199, 204,
750 188, 169, 323, 222, 256, 267, 378, 278, 292, 279,
751 366, 367, 369, 409, 340, 380, 325, 397, 377, 424,
752
753 404, 407, 433, 439, 413, 408, 370, 434, 226, 445,
754 450, 447, 457, 472, 460, 477, 461, 479, 471, 497,
755 485, 248, 492, 512, 504, 242, 502, 531, 527, 519,
756 521, 529, 520, 558, 539, 559, 543, 547, 563, 557,
757 180, 164, 138, 231, 122, 531, 158, 79, 501, 66,
758 608, 612, 0, 580, 584, 321, 587, 594, 607, 602,
759 585, 598, 603, 614, 604, 626, 632, 623, 638, 627,
760 599, 653, 697, 636, 639, 642, 652, 649, 651, 672,
761 677, 682, 675, 678, 698, 676, 702, 714, 729, 721,
762 712, 715, 696, 742, 755, 741, 740, 756, 757, 744,
763
764 759, 758, 769, 777, 768, 767, 406, 771, 772, 779,
765 773, 776, 792, 800, 795, 796, 793, 826, 806, 807,
766 827, 808, 819, 823, 820, 824, 838, 846, 836, 822,
767 837, 850, 840, 865, 849, 852, 871, 456, 867, 879,
768 876, 857, 882, 869, 864, 889, 884, 896, 890, 894,
769 905, 910, 914, 907, 903, 906, 908, 911, 921, 924,
770 932, 933, 937, 942, 173, 940, 953, 956, 928, 935,
771 962, 964, 952, 977, 959, 979, 976, 980, 989, 981,
772 985, 992, 974, 984, 997, 986, 995, 1011, 1007, 1023,
773 1012, 1031, 1015, 1041, 1016, 1020, 1037, 1024, 1080, 1026,
774
775 1038, 1043, 1074, 1046, 1053, 1057, 1083, 1087, 1075, 1091,
776 1088, 1112, 1114, 1090, 1104, 1119, 1113, 1124, 1122, 1118,
777 1132, 1127, 1138, 1159, 8475, 1143, 1148, 1149, 1161, 1167,
778 1179, 1154, 1194, 1164, 1176, 1190, 1174, 1187, 1199, 1247,
779 1196, 1201, 1203, 1217, 1211, 8475, 1252, 1219, 1297, 1238,
780 1242, 1261, 1256, 1237, 1257, 1277, 1245, 1275, 1246, 1279,
781 1281, 1293, 1319, 1295, 1290, 1315, 1314, 1320, 1333, 1336,
782 1343, 1331, 1337, 1339, 1338, 1330, 1345, 1354, 1288, 1347,
783 1352, 1357, 1363, 1381, 1365, 1387, 1384, 1370, 1378, 1382,
784 1395, 1388, 1410, 1390, 1416, 1420, 1414, 1408, 1415, 1425,
785
786 1434, 1422, 1433, 1443, 1442, 1207, 1440, 1449, 1463, 1412,
787 1452, 1451, 1447, 1470, 1472, 1483, 1461, 1467, 1478, 1474,
788 1482, 1494, 1491, 1480, 1501, 1495, 1514, 1502, 8475, 1519,
789 1505, 1509, 1518, 1511, 1522, 8475, 1530, 1532, 1541, 1540,
790 1547, 1542, 1557, 1546, 1570, 1536, 1558, 1549, 1575, 1566,
791 1568, 1585, 1574, 1587, 1582, 1569, 1596, 1589, 1591, 1602,
792 1595, 1601, 1597, 1647, 8475, 1605, 1627, 1631, 1622, 1629,
793 1656, 1672, 1644, 1638, 1662, 1670, 1690, 1675, 1689, 1680,
794 1637, 1697, 1684, 1700, 1699, 1708, 1706, 1696, 1707, 1705,
795 1704, 1719, 1724, 1737, 8475, 1735, 1741, 1649, 1740, 1734,
796
797 1731, 1746, 1742, 1736, 1751, 1761, 1773, 1772, 1759, 1758,
798 1771, 1794, 1778, 1788, 1779, 1777, 1798, 1805, 1807, 1795,
799 1814, 1800, 1797, 1812, 1801, 1829, 1831, 1838, 1815, 1834,
800 1839, 1827, 1840, 1842, 1847, 1828, 1830, 1855, 1865, 1858,
801 1850, 1875, 1861, 1888, 1879, 1873, 1891, 1878, 1889, 1883,
802 1892, 1893, 1895, 1912, 8475, 1917, 1904, 1926, 1931, 1928,
803 1934, 1936, 1916, 1920, 1939, 1954, 1943, 1922, 1945, 1962,
804 1955, 1960, 1968, 1966, 1956, 1973, 1982, 1992, 1983, 1975,
805 1970, 1994, 1997, 1991, 2004, 2011, 2012, 2016, 2007, 2009,
806 2006, 2032, 2010, 2019, 2035, 2030, 2041, 2038, 2048, 2037,
807
808 2046, 2049, 2079, 2059, 2036, 2068, 2063, 2069, 2062, 2065,
809 2073, 2075, 2081, 2089, 2095, 2096, 2088, 2097, 2086, 2092,
810 2102, 2110, 2122, 2106, 2115, 2116, 2117, 2130, 2128, 2124,
811 2132, 2147, 2126, 2142, 2157, 2144, 2141, 2153, 2162, 2173,
812 2154, 2163, 2175, 2172, 2181, 2187, 2190, 2191, 2180, 2197,
813 2192, 2202, 2203, 2199, 2205, 2217, 2223, 2219, 2225, 2221,
814 2226, 2214, 2242, 2248, 2245, 2246, 8475, 2232, 2261, 2238,
815 2260, 2254, 2243, 2253, 2279, 2269, 2276, 2272, 2267, 2280,
816 2323, 8475, 2274, 8475, 8475, 2285, 8475, 8475, 2288, 2303,
817 2295, 2310, 2312, 2319, 2322, 2307, 2317, 2334, 2291, 2381,
818
819 2316, 2330, 2346, 2338, 2350, 2367, 2368, 2369, 2359, 2378,
820 2371, 2384, 2402, 2390, 2377, 2394, 2414, 2403, 2405, 2417,
821 2421, 2416, 2419, 2427, 2420, 2430, 2434, 2440, 2432, 2436,
822 2471, 8475, 2448, 2467, 2473, 2465, 2477, 2475, 2468, 2476,
823 2479, 2481, 2480, 2464, 2485, 2486, 2491, 2487, 2507, 2511,
824 2494, 2503, 8475, 2514, 2515, 2520, 2517, 2528, 2527, 2521,
825 2536, 2530, 2543, 2533, 2544, 2549, 2546, 2558, 2550, 2575,
826 8475, 2566, 2569, 2560, 2577, 2563, 2579, 2580, 2576, 2590,
827 2588, 2589, 2614, 2601, 2602, 2625, 2613, 2611, 2615, 2616,
828 2626, 2617, 2628, 2635, 2627, 2642, 2636, 2657, 2644, 2645,
829
830 2649, 2646, 2675, 2663, 2680, 2659, 2685, 2686, 2678, 2669,
831 2691, 2692, 2687, 2698, 2690, 2707, 2671, 2709, 2705, 2700,
832 2701, 2713, 2716, 2723, 2714, 2735, 2732, 2724, 2725, 2737,
833 2734, 8475, 2730, 2741, 8475, 2743, 2744, 2790, 2775, 2773,
834 2752, 2778, 2758, 2782, 2781, 2798, 2792, 2800, 2789, 2804,
835 2803, 2817, 2831, 2810, 2821, 2822, 2826, 2823, 2852, 2856,
836 2854, 282, 2857, 2833, 2842, 2847, 2892, 2860, 2859, 2862,
837 2863, 2867, 2896, 2869, 2883, 2886, 2888, 2908, 2910, 8475,
838 2890, 2913, 2902, 2909, 2931, 2925, 2923, 2935, 2937, 2938,
839 2936, 2947, 2932, 2948, 2940, 2941, 2950, 2949, 2957, 2963,
840
841 2973, 2968, 2991, 8475, 2976, 8475, 2975, 2974, 2977, 2984,
842 2987, 2993, 3002, 3004, 8475, 8475, 3010, 3013, 3016, 3018,
843 3011, 8475, 3012, 3046, 3026, 3044, 3034, 3032, 3038, 3037,
844 3043, 3065, 3042, 3068, 3051, 3067, 3070, 8475, 3073, 3059,
845 3077, 3083, 3071, 3085, 3086, 3069, 8475, 3095, 3089, 3096,
846 3111, 3119, 3112, 3106, 3117, 3125, 3109, 3115, 3110, 3128,
847 3122, 3145, 3146, 3138, 3151, 3154, 3150, 8475, 3142, 3144,
848 3155, 3158, 3166, 3165, 3167, 3157, 3177, 3185, 3168, 3171,
849 3184, 3178, 3172, 3173, 3193, 3204, 3210, 3194, 3200, 3205,
850 641, 3201, 3216, 3199, 3222, 8475, 3211, 3229, 61, 3228,
851
852 3224, 3221, 3245, 3244, 3234, 3238, 3227, 3264, 3257, 3261,
853 3265, 3254, 3259, 3271, 3252, 3256, 3280, 3278, 3277, 8475,
854 3282, 3285, 3283, 3291, 3302, 3295, 3311, 8475, 3312, 3314,
855 3310, 3307, 3328, 3318, 3323, 3342, 3334, 3344, 3340, 3337,
856 8475, 3360, 3357, 3361, 3345, 3363, 3369, 3370, 3367, 3371,
857 3358, 3387, 3376, 3374, 3390, 3388, 3384, 3392, 3406, 3401,
858 3400, 3403, 3413, 8475, 3426, 3411, 3427, 3404, 3431, 3429,
859 3460, 3438, 3432, 3448, 3443, 3484, 3451, 3458, 3447, 3468,
860 3472, 3473, 3453, 3474, 3478, 3485, 3481, 3513, 3512, 3498,
861 3504, 3519, 3506, 3516, 3509, 3520, 3471, 3532, 3530, 3533,
862
863 3557, 3551, 218, 3543, 8475, 3559, 3541, 3540, 3560, 3594,
864 3570, 3583, 3568, 3590, 3584, 3586, 3587, 3579, 3606, 3600,
865 3598, 3611, 3604, 3613, 3602, 3617, 3619, 3445, 3621, 3623,
866 3635, 8475, 3638, 3647, 3634, 3645, 3655, 3639, 3656, 3657,
867 3662, 3649, 3650, 3660, 3668, 3672, 3673, 3685, 3669, 3689,
868 3674, 8475, 3700, 3694, 3699, 3701, 3702, 3708, 3717, 3723,
869 3720, 3696, 3705, 3727, 3726, 8475, 3747, 3748, 3740, 3751,
870 3746, 3737, 3749, 3757, 3738, 8475, 3742, 3736, 3753, 3773,
871 3764, 8475, 3776, 3774, 3772, 3769, 3763, 3775, 3778, 3787,
872 3784, 3795, 3805, 3798, 3789, 3818, 8475, 3808, 3829, 3799,
873
874 3819, 3822, 3824, 3816, 3844, 3855, 3839, 3834, 3847, 3849,
875 3856, 3845, 3843, 3861, 3868, 3866, 3872, 3858, 8475, 3883,
876 3874, 3880, 3901, 3899, 3890, 3893, 3886, 3904, 3895, 3907,
877 3900, 3917, 3918, 3928, 3929, 3935, 3920, 3941, 3945, 3934,
878 3947, 3930, 3961, 3957, 3959, 3968, 3970, 8475, 3958, 3975,
879 3972, 3964, 3973, 3974, 3976, 3991, 3984, 3986, 3985, 3993,
880 3996, 4027, 4029, 4005, 4032, 4009, 4011, 4017, 4034, 4016,
881 4020, 4019, 4046, 4043, 4023, 4050, 4044, 4045, 4070, 4055,
882 4060, 4061, 4062, 4069, 4064, 4071, 4067, 4089, 4072, 4093,
883 4095, 4098, 4090, 4096, 4091, 4122, 8475, 4110, 4094, 4106,
884
885 4118, 4135, 4133, 4119, 4125, 4130, 4139, 4146, 4152, 4127,
886 4145, 4149, 4153, 4158, 8475, 4157, 8475, 4160, 4159, 4177,
887 4187, 4168, 8475, 4189, 8475, 4190, 4192, 4182, 4183, 8475,
888 4191, 4180, 4197, 4202, 4186, 4210, 4213, 4207, 4208, 4235,
889 4220, 4226, 4217, 4244, 4229, 4228, 4247, 4233, 4223, 4250,
890 4237, 4260, 4256, 4255, 4263, 4270, 4271, 8475, 4280, 4268,
891 4277, 4281, 4282, 4285, 4298, 4287, 4295, 4297, 4293, 4306,
892 4312, 4319, 4325, 4336, 4314, 4340, 8475, 4329, 4345, 4328,
893 4344, 8475, 4346, 4338, 4348, 4352, 4354, 4342, 4367, 4361,
894 4357, 4371, 4366, 4393, 4395, 4387, 4388, 4398, 4375, 4401,
895
896 4406, 4402, 4415, 4417, 4410, 4427, 4408, 4422, 4420, 4426,
897 4433, 4455, 4456, 4447, 4460, 4434, 4453, 4441, 4459, 4444,
898 4445, 4449, 4461, 4463, 4466, 4468, 4499, 4480, 4483, 4484,
899 4485, 8475, 4470, 4489, 4496, 4512, 4502, 4504, 4495, 4497,
900 4505, 4520, 4527, 4539, 4522, 8475, 4537, 8475, 4528, 4540,
901 4550, 4556, 4546, 4541, 4560, 4569, 4561, 4562, 4566, 4567,
902 4573, 4575, 4586, 4578, 4594, 4598, 4587, 4604, 4589, 4599,
903 4593, 4596, 4601, 4615, 8475, 4616, 4622, 4628, 4619, 4623,
904 4642, 4650, 4636, 4634, 4637, 4639, 4676, 8475, 4646, 4655,
905 4659, 4675, 4688, 4671, 4690, 4693, 4686, 4698, 4694, 8475,
906
907 4679, 4682, 4706, 4692, 4701, 4716, 8475, 4687, 8475, 4711,
908 4715, 4721, 4726, 4723, 4727, 4725, 4731, 4744, 4746, 4751,
909 4742, 4748, 4752, 4757, 4747, 4754, 4737, 4761, 4762, 8475,
910 4724, 4763, 4781, 4786, 4788, 4789, 4787, 4775, 8475, 4784,
911 4800, 4782, 4805, 4803, 4806, 4810, 4812, 4823, 4826, 4815,
912 4809, 4836, 4828, 4825, 4839, 4841, 4844, 4848, 8475, 4849,
913 4850, 4862, 4858, 4852, 4867, 4857, 4853, 4856, 4870, 4872,
914 4877, 4883, 4881, 4880, 4896, 4889, 4886, 4887, 4903, 4917,
915 4897, 4907, 4905, 4915, 4925, 4923, 4930, 4936, 4940, 4929,
916 4941, 4942, 4934, 4938, 4946, 4947, 4952, 4957, 8475, 4976,
917
918 4954, 4980, 4958, 4974, 4988, 4989, 4985, 4979, 4975, 4994,
919 4999, 5003, 8475, 5005, 4997, 5006, 5002, 5012, 5001, 5022,
920 5016, 5021, 5034, 5018, 5045, 5032, 5029, 5054, 5037, 5033,
921 8475, 8475, 5047, 5040, 5048, 8475, 5059, 5049, 5067, 5066,
922 5056, 5072, 5078, 5079, 5063, 5090, 5074, 5080, 8475, 5093,
923 5107, 5083, 5101, 5114, 5116, 5113, 5117, 5110, 5104, 5102,
924 5120, 5123, 5115, 5112, 5135, 5150, 5134, 5137, 5151, 8475,
925 5146, 5145, 5153, 5156, 5149, 5142, 8475, 5169, 5170, 5180,
926 5178, 5175, 5185, 5192, 5190, 5179, 5177, 5201, 5194, 5202,
927 5204, 5214, 5196, 5205, 5225, 5232, 5230, 8475, 5227, 5228,
928
929 5223, 5240, 5242, 5253, 5250, 5251, 5238, 5257, 5246, 5261,
930 8475, 5256, 5270, 5260, 5254, 5280, 5271, 5281, 5278, 8475,
931 5282, 5273, 5291, 8475, 5283, 5301, 5303, 5304, 5295, 5287,
932 5305, 5307, 5310, 5317, 8475, 5319, 8475, 5322, 5321, 5334,
933 8475, 5328, 5329, 5331, 5327, 5338, 5345, 5352, 5359, 5344,
934 5360, 5348, 5351, 5372, 5368, 5385, 5367, 8475, 5389, 5365,
935 5379, 5397, 5393, 5392, 5384, 5408, 5394, 8475, 8475, 5382,
936 8475, 5411, 5406, 5410, 8475, 5403, 5409, 5432, 5425, 5438,
937 5441, 5444, 5440, 8475, 5447, 5431, 5445, 5452, 5435, 5464,
938 5465, 5468, 5437, 5467, 5478, 8475, 5466, 5473, 5460, 5471,
939
940 5479, 5493, 5503, 5490, 8475, 5509, 5500, 5501, 5513, 5515,
941 8475, 5512, 8475, 5507, 5523, 5526, 5529, 5524, 8475, 5542,
942 5533, 5554, 5535, 5550, 5562, 5552, 5558, 5548, 5553, 5506,
943 5567, 5565, 5560, 8475, 5577, 5583, 5576, 5585, 5587, 5581,
944 5588, 5593, 5604, 5603, 5607, 5605, 5608, 5615, 5612, 5613,
945 5623, 8475, 5640, 5624, 5633, 5661, 5628, 5635, 8475, 5645,
946 5653, 5660, 8475, 5646, 5643, 5662, 5666, 5651, 5664, 5667,
947 5681, 5684, 8475, 5685, 5688, 5686, 5696, 5698, 5693, 8475,
948 8475, 5712, 8475, 5708, 5694, 5692, 5719, 5711, 5723, 5677,
949 5733, 5716, 5721, 5743, 5744, 5738, 5757, 5758, 5759, 5752,
950
951 5748, 5741, 8475, 8475, 5762, 5765, 5763, 5773, 5776, 5769,
952 5779, 5792, 5789, 5800, 5795, 5793, 5807, 8475, 5805, 5790,
953 5808, 8475, 5786, 5818, 5803, 5814, 5828, 5813, 5827, 5815,
954 5840, 5832, 5841, 5822, 5839, 5838, 5856, 5849, 5845, 5852,
955 8475, 5869, 5866, 5867, 5864, 5868, 5878, 5879, 5889, 5881,
956 8475, 5883, 5880, 5896, 5890, 5895, 5905, 5910, 5915, 5920,
957 5906, 5922, 5930, 5932, 5934, 5938, 8475, 5945, 5919, 5933,
958 5928, 5951, 5952, 5937, 5954, 5955, 5963, 5959, 5964, 5975,
959 5976, 5970, 5978, 5971, 5980, 8475, 5983, 5989, 5990, 5992,
960 5977, 6000, 5991, 6007, 5993, 6005, 5998, 6010, 6028, 8475,
961
962 6011, 6016, 6015, 6037, 6044, 6026, 6032, 6033, 8475, 6046,
963 6034, 6042, 6038, 6059, 6060, 6036, 6066, 6061, 6080, 6081,
964 8475, 6071, 6085, 6086, 6075, 6079, 6093, 6098, 6069, 8475,
965 6110, 6111, 6106, 6128, 6108, 6136, 6119, 6127, 6109, 6126,
966 6137, 6135, 6138, 6141, 6143, 6131, 6154, 6162, 6156, 8475,
967 6149, 8475, 6164, 6174, 6183, 6179, 6170, 8475, 6166, 6168,
968 6185, 6171, 6194, 8475, 6187, 6189, 6193, 6206, 8475, 6201,
969 6217, 6207, 6211, 6224, 6228, 8475, 6225, 6233, 6232, 6244,
970 6245, 6241, 6234, 6242, 6235, 6239, 6238, 6266, 8475, 6254,
971 6270, 6276, 6272, 6269, 6259, 6283, 6282, 6275, 8475, 6284,
972
973 6271, 6281, 6293, 6286, 6292, 6316, 6297, 6317, 6304, 8475,
974 6309, 6324, 6300, 6318, 6328, 8475, 8475, 6319, 6331, 6334,
975 6314, 6341, 8475, 6343, 6359, 6350, 6338, 6354, 8475, 8475,
976 6366, 8475, 6353, 8475, 6358, 6357, 8475, 8475, 6370, 6352,
977 6377, 6383, 6376, 8475, 6387, 8475, 6396, 6391, 6379, 6385,
978 6389, 8475, 6398, 6399, 6401, 8475, 6404, 6425, 6406, 6412,
979 8475, 6408, 6410, 6414, 8475, 6435, 6430, 6437, 6428, 6434,
980 6440, 6447, 6439, 6444, 6438, 6455, 6448, 6473, 6479, 6481,
981 6483, 6484, 6474, 6470, 6485, 6491, 6493, 6477, 6487, 6476,
982 6482, 6502, 6503, 6507, 6524, 6516, 6519, 6521, 6520, 6513,
983
984 6530, 6517, 6518, 6536, 6541, 6526, 6546, 6529, 6543, 6547,
985 6570, 6563, 6560, 6565, 8475, 6558, 6556, 6559, 6581, 6577,
986 6590, 6596, 6589, 6600, 6605, 8475, 6609, 8475, 6611, 6597,
987 6602, 6607, 8475, 6594, 6617, 6598, 6623, 6621, 6625, 6628,
988 6648, 8475, 6631, 6629, 6650, 6654, 8475, 6652, 6660, 6647,
989 6653, 6656, 6667, 6666, 6673, 6669, 6670, 6668, 6699, 6674,
990 6686, 6687, 6688, 6698, 6690, 6700, 6701, 6717, 6705, 6721,
991 6708, 8475, 6722, 8475, 6715, 6726, 6727, 6716, 6733, 6732,
992 6737, 8475, 8475, 6735, 6754, 6740, 6743, 6751, 6761, 6767,
993 8475, 6759, 6772, 6773, 6762, 8475, 6760, 6770, 6777, 8475,
994
995 6779, 6783, 6789, 6795, 6786, 6808, 6804, 6802, 6796, 6803,
996 6814, 8475, 8475, 8475, 8475, 6820, 6806, 6824, 6813, 6830,
997 6818, 6825, 6837, 6829, 8475, 6846, 8475, 8475, 6845, 6853,
998 6835, 6854, 6852, 6847, 6856, 6855, 8475, 6869, 6862, 6870,
999 6873, 6868, 6878, 6891, 6894, 6883, 6885, 6896, 6902, 6905,
1000 6889, 6908, 6909, 6914, 8475, 8475, 6911, 6917, 6916, 6927,
1001 6915, 6932, 6944, 6941, 6943, 6940, 6935, 6947, 6951, 6946,
1002 8475, 6952, 6960, 8475, 6953, 8475, 6961, 6964, 6968, 6976,
1003 6972, 6985, 6996, 6991, 8475, 8475, 6979, 6982, 6988, 7001,
1004 6992, 6995, 6990, 7010, 7014, 8475, 7015, 8475, 7016, 7022,
1005
1006 7020, 7019, 7040, 7045, 7050, 7039, 7043, 7047, 8475, 7046,
1007 7035, 8475, 7054, 7042, 7049, 8475, 7060, 7059, 7065, 8475,
1008 7068, 7076, 7079, 8475, 7089, 8475, 7070, 7088, 7082, 7101,
1009 8475, 7078, 7099, 8475, 7102, 7104, 7105, 7097, 8475, 7095,
1010 8475, 7092, 7114, 7117, 7123, 7115, 7133, 7121, 7120, 7122,
1011 7148, 7146, 7147, 8475, 8475, 7158, 7129, 7135, 7139, 7161,
1012 7169, 7143, 7150, 7171, 8475, 8475, 7175, 8475, 7164, 7173,
1013 8475, 7162, 7181, 7188, 7185, 7165, 7177, 7195, 7193, 7194,
1014 7208, 7223, 7200, 7201, 7224, 7228, 7230, 7233, 7210, 7236,
1015 7218, 7221, 7235, 7222, 7239, 8475, 7254, 7261, 7249, 8475,
1016
1017 7270, 7265, 7273, 7274, 8475, 7275, 7268, 7269, 7271, 8475,
1018 7266, 7282, 7281, 7294, 7295, 7318, 7301, 7306, 8475, 8475,
1019 8475, 7311, 7290, 8475, 7319, 7309, 7299, 7302, 8475, 7322,
1020 7313, 8475, 8475, 7307, 7326, 7328, 7344, 8475, 7342, 8475,
1021 7336, 8475, 7351, 7355, 7363, 7352, 8475, 7362, 7369, 8475,
1022 7365, 7366, 7368, 7371, 7379, 7358, 7381, 8475, 7349, 7396,
1023 7397, 7403, 7387, 7388, 7406, 7392, 7417, 7391, 7420, 8475,
1024 7408, 7407, 7419, 8475, 7421, 8475, 7418, 7428, 7436, 7433,
1025 7434, 7432, 7444, 7448, 7430, 7462, 7445, 8475, 7465, 7470,
1026 8475, 7455, 8475, 7473, 8475, 7458, 7468, 7471, 7481, 8475,
1027
1028 7488, 7479, 7467, 7477, 8475, 7492, 7491, 7502, 8475, 8475,
1029 7489, 7512, 7516, 7500, 7510, 7524, 7508, 7525, 7519, 7529,
1030 7513, 7536, 7515, 7535, 7539, 7541, 7542, 7549, 8475, 8475,
1031 8475, 7546, 7555, 7569, 7553, 7551, 7572, 7552, 8475, 7578,
1032 7579, 7568, 7593, 7573, 7589, 8475, 7592, 7582, 7585, 8475,
1033 7598, 7603, 7599, 7608, 7602, 7613, 7615, 7623, 7619, 8475,
1034 7627, 8475, 8475, 7614, 8475, 7610, 7616, 7617, 7635, 8475,
1035 7645, 7634, 7637, 7643, 7647, 8475, 7658, 7649, 7654, 7650,
1036 8475, 8475, 7656, 8475, 7667, 7663, 7664, 7676, 7674, 7672,
1037 7687, 7683, 8475, 7677, 7682, 7684, 7681, 7692, 8475, 7704,
1038
1039 7699, 7701, 7703, 7709, 7690, 7717, 7711, 7736, 8475, 8475,
1040 7720, 7724, 8475, 8475, 7722, 7742, 7739, 8475, 8475, 8475,
1041 7746, 8475, 7752, 7757, 7759, 7773, 7749, 8475, 7760, 7747,
1042 7761, 8475, 7758, 7762, 7772, 7781, 8475, 8475, 7766, 7776,
1043 7786, 7785, 7780, 8475, 7779, 7787, 7800, 7798, 7811, 7804,
1044 7810, 7817, 7835, 7821, 7807, 7818, 7820, 7831, 7834, 7824,
1045 7840, 7844, 8475, 8475, 7850, 8475, 8475, 7852, 7854, 7855,
1046 7857, 7864, 7865, 7869, 8475, 7863, 7873, 7866, 7862, 7858,
1047 8475, 7861, 7883, 7871, 7881, 7885, 7902, 7889, 7887, 8475,
1048 8475, 7888, 7892, 7891, 7908, 7893, 8475, 7920, 7930, 7912,
1049
1050 7922, 7913, 7910, 7918, 8475, 7931, 8475, 8475, 8475, 8475,
1051 8475, 8475, 8475, 8475, 7938, 8475, 7929, 7943, 7948, 7951,
1052 8475, 7937, 7953, 7959, 7947, 7952, 8475, 7949, 7970, 7977,
1053 7969, 7968, 7984, 7975, 7973, 7987, 7990, 7976, 7998, 7995,
1054 8000, 8002, 8475, 8475, 8475, 8004, 8003, 8021, 8015, 8026,
1055 8034, 8036, 8037, 8019, 8029, 8041, 8047, 8050, 8014, 8042,
1056 7957, 8040, 8053, 8058, 8045, 8051, 8059, 8475, 8068, 8475,
1057 8071, 8475, 8475, 8075, 8087, 8082, 8072, 8097, 8098, 8080,
1058 8092, 8077, 8101, 8475, 8085, 8093, 8475, 8108, 8099, 8475,
1059 8107, 8124, 8112, 8123, 8125, 8118, 8139, 8141, 8475, 8128,
1060
1061 8135, 8140, 8142, 8152, 8116, 8160, 8165, 8167, 8169, 8158,
1062 8181, 8178, 8184, 8182, 8475, 8179, 8171, 8186, 8176, 8188,
1063 8196, 8199, 8187, 8475, 8201, 8475, 8212, 8221, 8214, 8205,
1064 8216, 8223, 8237, 8220, 8227, 8475, 8229, 8241, 8234, 8243,
1065 8248, 8254, 8251, 8247, 8272, 8268, 8275, 8279, 8276, 8280,
1066 8265, 8285, 8269, 8475, 8289, 8278, 8475, 8286, 8293, 8282,
1067 8300, 8307, 8475, 8294, 8303, 8304, 8325, 8329, 8330, 8475,
1068 8332, 8333, 8331, 8475, 8334, 8475, 8475, 8335, 8317, 8324,
1069 8341, 8342, 8475, 8475, 8475, 8383, 8390, 8397, 8404, 8411,
1070 83, 8418, 8425, 8432, 8439, 8446, 8453, 8460, 8467
1071
760 131, 137, 112, 118, 123, 142, 476, 428, 96, 8937,
761 8937, 8937, 160, 185, 116, 183, 229, 132, 175, 173,
762 232, 50, 66, 120, 263, 275, 145, 319, 134, 371,
763 412, 286, 308, 283, 126, 237, 419, 8937, 8937, 8937,
764 95, 418, 8937, 8937, 8937, 186, 394, 423, 8937, 8937,
765 8937, 258, 366, 8937, 8937, 8937, 104, 347, 8937, 266,
766 8937, 167, 349, 346, 376, 8937, 8937, 8937, 356, 303,
767 8937, 8937, 8937, 146, 281, 368, 234, 0, 388, 0,
768 0, 291, 270, 235, 193, 259, 339, 367, 340, 177,
769
770 226, 395, 373, 384, 377, 368, 410, 411, 309, 429,
771 357, 408, 438, 444, 416, 458, 455, 443, 467, 480,
772 471, 452, 469, 479, 484, 501, 489, 498, 494, 505,
773 513, 528, 500, 514, 523, 540, 363, 522, 519, 554,
774 539, 250, 549, 573, 571, 566, 550, 535, 576, 600,
775 585, 558, 595, 586, 601, 603, 273, 179, 268, 205,
776 208, 648, 241, 194, 187, 180, 654, 660, 0, 605,
777 138, 664, 168, 128, 341, 609, 652, 639, 644, 654,
778 653, 655, 646, 668, 667, 650, 666, 673, 651, 680,
779 697, 256, 706, 750, 703, 696, 692, 710, 712, 701,
780
781 694, 723, 716, 724, 731, 707, 740, 730, 756, 757,
782 798, 758, 749, 776, 290, 767, 805, 325, 760, 779,
783 806, 787, 783, 807, 810, 814, 786, 809, 817, 801,
784 824, 825, 819, 840, 850, 849, 841, 843, 842, 865,
785 861, 845, 860, 851, 876, 877, 880, 874, 879, 897,
786 883, 891, 886, 910, 889, 914, 900, 901, 916, 919,
787 935, 925, 929, 909, 928, 922, 938, 937, 920, 946,
788 927, 943, 968, 961, 964, 973, 956, 960, 958, 965,
789 978, 972, 987, 991, 988, 980, 187, 984, 1003, 1008,
790 996, 995, 1013, 1015, 1011, 1017, 1030, 1014, 1032, 1031,
791
792 1037, 1041, 1047, 1029, 1054, 1043, 1049, 1044, 1039, 1050,
793 1066, 1055, 1076, 1064, 1068, 1084, 1070, 1096, 1075, 1103,
794 1098, 1092, 1135, 1097, 1090, 1100, 1136, 1115, 1109, 1134,
795 1148, 1164, 1162, 1166, 1143, 1160, 1163, 1121, 1171, 1187,
796 1179, 1190, 1185, 1110, 1180, 1189, 1206, 1208, 8937, 1198,
797 1214, 1207, 1221, 1232, 1225, 1215, 1246, 1196, 1250, 1213,
798 1140, 1234, 1266, 1314, 1254, 1223, 1253, 1257, 1271, 8937,
799 1294, 1277, 1363, 1292, 1273, 1263, 1299, 1295, 1301, 1296,
800 1318, 1312, 1259, 1323, 1309, 1332, 1357, 1344, 1354, 1360,
801 1368, 1364, 1370, 1373, 1371, 1388, 1391, 1397, 1394, 1389,
802
803 1401, 1415, 1424, 1399, 1409, 1413, 1418, 1281, 1435, 1423,
804 1430, 1438, 1441, 1416, 1447, 1451, 1453, 1461, 1462, 1468,
805 1475, 1476, 1477, 1465, 1478, 1487, 1490, 1494, 1489, 1500,
806 1502, 1386, 1514, 1510, 1506, 1527, 1520, 1516, 1511, 1525,
807 1534, 1544, 1528, 1529, 1517, 1536, 1557, 1561, 1552, 1567,
808 1569, 1556, 1572, 1426, 8937, 1580, 1576, 1578, 1584, 1562,
809 1590, 8937, 1592, 1594, 1601, 1595, 1589, 1611, 1613, 1609,
810 1619, 1628, 1620, 1617, 1638, 1629, 1640, 1653, 1637, 1647,
811 1641, 1639, 1658, 1664, 1657, 1668, 1659, 1674, 1670, 1720,
812 8937, 1661, 1667, 1688, 1684, 1689, 1700, 1724, 1708, 1717,
813
814 1738, 1716, 1763, 1743, 1711, 1748, 1742, 1773, 1751, 1778,
815 1765, 1760, 1767, 1718, 1761, 1786, 1784, 1758, 1781, 1806,
816 8937, 1788, 1798, 1819, 1804, 1807, 1808, 1803, 1811, 1608,
817 1824, 1823, 1830, 1813, 1837, 1846, 1833, 1847, 1840, 1853,
818 1844, 1850, 1857, 1863, 1859, 1854, 1887, 1881, 1861, 1869,
819 1896, 1876, 1898, 1904, 1906, 1886, 1897, 1905, 1890, 1903,
820 1912, 1913, 1893, 1922, 1924, 1917, 1925, 1908, 1942, 1930,
821 1927, 1943, 1932, 1955, 1944, 1959, 1954, 1949, 1956, 1973,
822 1952, 1969, 8937, 1985, 1982, 1992, 1994, 1996, 1999, 2003,
823 1988, 1979, 2000, 2019, 2009, 1990, 2013, 2024, 2023, 2022,
824
825 2030, 2031, 2021, 2046, 2041, 2055, 2053, 2040, 2057, 2047,
826 2060, 2058, 2067, 2073, 2059, 2097, 2068, 2080, 2091, 2082,
827 2079, 2090, 2100, 2092, 2088, 2094, 2126, 2109, 2118, 2108,
828 2146, 2121, 2106, 2132, 2123, 2141, 2133, 2136, 2137, 2147,
829 2145, 2152, 2158, 2167, 2160, 2168, 2159, 2161, 2172, 2181,
830 2195, 2186, 2179, 2178, 2182, 2194, 2199, 2203, 2202, 2213,
831 2214, 2207, 2221, 2215, 2234, 2218, 2225, 2239, 2244, 2240,
832 2250, 2241, 2248, 2246, 2263, 2252, 2267, 2268, 2278, 2265,
833 2273, 2279, 2277, 2293, 2299, 2303, 2294, 2282, 2295, 2297,
834 2296, 2319, 2327, 2331, 2323, 8937, 2314, 2344, 2320, 2338,
835
836 2337, 2318, 2330, 2356, 2345, 2354, 2350, 2357, 2346, 2408,
837 8937, 2347, 8937, 8937, 2370, 8937, 8937, 2369, 2373, 8937,
838 2385, 2376, 2394, 2406, 2414, 2405, 2381, 2397, 2402, 2409,
839 2457, 2418, 2425, 2421, 2426, 2453, 2465, 2455, 2466, 2472,
840 2470, 2463, 2474, 2495, 2479, 2503, 2496, 2488, 2506, 2489,
841 2492, 2504, 2516, 2498, 2514, 2519, 2524, 2533, 2499, 2436,
842 2544, 2529, 2557, 8937, 2548, 2523, 2559, 2556, 2563, 2562,
843 2558, 2560, 2566, 2567, 2569, 2552, 2573, 2574, 2579, 2582,
844 2590, 2594, 2608, 2588, 8937, 2601, 2603, 2587, 2613, 2614,
845 2616, 2615, 2617, 2597, 2624, 2635, 2632, 2651, 2638, 2636,
846
847 2645, 2637, 2663, 8937, 2665, 2656, 2649, 2664, 2650, 2675,
848 2679, 2662, 2680, 2676, 2681, 2682, 2687, 2691, 2641, 2706,
849 2707, 2697, 2703, 2714, 2709, 2724, 2721, 2708, 2730, 2718,
850 2732, 2733, 2727, 2742, 2743, 2757, 2767, 2744, 2769, 2748,
851 2777, 2778, 2770, 2760, 2771, 2776, 2765, 2788, 2782, 2790,
852 2784, 2787, 2804, 2792, 2807, 2803, 2817, 2828, 2809, 2829,
853 2825, 2810, 2815, 2836, 2819, 8937, 2816, 2831, 8937, 2827,
854 2843, 2889, 2849, 2853, 2846, 2866, 2844, 2875, 2870, 2868,
855 2876, 2872, 2920, 2895, 2887, 2907, 2902, 2921, 2906, 2919,
856 2916, 2914, 2925, 2931, 2943, 2880, 2947, 2954, 433, 2960,
857
858 2934, 2945, 2941, 2991, 2957, 2966, 2961, 2967, 2976, 2968,
859 2974, 2993, 2989, 2994, 2985, 3018, 3003, 8937, 3019, 3012,
860 3006, 3014, 3033, 3024, 3028, 8937, 3034, 3039, 3037, 3036,
861 3049, 3038, 3054, 3042, 3063, 3051, 3055, 3064, 3070, 3066,
862 3075, 3041, 8937, 3080, 8937, 3074, 3083, 3068, 3091, 3090,
863 3094, 3106, 3107, 8937, 8937, 3115, 3104, 3121, 3129, 3114,
864 8937, 3110, 3150, 3124, 3140, 3130, 3138, 3145, 3141, 3133,
865 3147, 3168, 3149, 3171, 3160, 3173, 3165, 8937, 3177, 3163,
866 3176, 3186, 3166, 3189, 3192, 3187, 8937, 3195, 3196, 3204,
867 3188, 3217, 3211, 3207, 3224, 3228, 3214, 3216, 3213, 3239,
868
869 3223, 3250, 3251, 3243, 3244, 3252, 3258, 8937, 3246, 3241,
870 3263, 3260, 3267, 3271, 3272, 3256, 3270, 3279, 3283, 3284,
871 3275, 3288, 3277, 3308, 3310, 3297, 3309, 3317, 3299, 3305,
872 3313, 91, 3303, 3320, 3315, 3306, 8937, 3324, 3328, 3330,
873 115, 3335, 3338, 3342, 3355, 3357, 3359, 3344, 3368, 3372,
874 3369, 3371, 3370, 3365, 3376, 3378, 3389, 3388, 3387, 3393,
875 3392, 8937, 3385, 3395, 3400, 3398, 3417, 3406, 3427, 8937,
876 3420, 3428, 3425, 3437, 3435, 3434, 3436, 3452, 3431, 3451,
877 3462, 3453, 3465, 3469, 3470, 3463, 8937, 3483, 3479, 3480,
878 3466, 3490, 3487, 3493, 3473, 3501, 3500, 3509, 3508, 3498,
879
880 3512, 3507, 3510, 3515, 3532, 3525, 3527, 3529, 3535, 8937,
881 3546, 3530, 3541, 3553, 3543, 3559, 3554, 3583, 3550, 3565,
882 3562, 3584, 3608, 3574, 3588, 3599, 3602, 3593, 3596, 3609,
883 3614, 3623, 3606, 3618, 3636, 3644, 3632, 3624, 3629, 3633,
884 3656, 3581, 3650, 3662, 3667, 3665, 3669, 3692, 3671, 3686,
885 3664, 8937, 3678, 3688, 3689, 3684, 3722, 3705, 3696, 3699,
886 3711, 3715, 3702, 3717, 3713, 3748, 3745, 3739, 3741, 3751,
887 3743, 3744, 3732, 3733, 3759, 3503, 3752, 3761, 3760, 8937,
888 3766, 3771, 3773, 3772, 3790, 3775, 3797, 3800, 3799, 3784,
889 3785, 3807, 3789, 3810, 3794, 3815, 3816, 3821, 3811, 8937,
890
891 3827, 3824, 3840, 3832, 3844, 3847, 3848, 3856, 3857, 3859,
892 3817, 3854, 3862, 3850, 8937, 3870, 3873, 3874, 3875, 3883,
893 3876, 3867, 3893, 3884, 8937, 3894, 3887, 3885, 3903, 3918,
894 3910, 8937, 3920, 3912, 3897, 3911, 3913, 3915, 3924, 3921,
895 3930, 3931, 3951, 3946, 3938, 3957, 8937, 3944, 3969, 3948,
896 3958, 3964, 3960, 3965, 3982, 3990, 3977, 3979, 3988, 8937,
897 3984, 3999, 3994, 4019, 3991, 4007, 4013, 4011, 4015, 4017,
898 4018, 4021, 8937, 4022, 4034, 4037, 4038, 4047, 4049, 4050,
899 4058, 4044, 4053, 4043, 4060, 4066, 4070, 4068, 4079, 4083,
900 4074, 4082, 4097, 4090, 4101, 4087, 4099, 4106, 4095, 4109,
901
902 4122, 4126, 8937, 4112, 4117, 4128, 4113, 4115, 4130, 4134,
903 4142, 4132, 4138, 4155, 4148, 4144, 4181, 4183, 4147, 4165,
904 4158, 4161, 4175, 4186, 4176, 4178, 4179, 4201, 4194, 4174,
905 4214, 4193, 4209, 4219, 4204, 4210, 4211, 4213, 4220, 4222,
906 4218, 4247, 4241, 4239, 4235, 4252, 4249, 4259, 4240, 4246,
907 4245, 4281, 8937, 4266, 4264, 4250, 4268, 4278, 4289, 4292,
908 4303, 4286, 4291, 4302, 4295, 4305, 4313, 4317, 4318, 4322,
909 4312, 8937, 4319, 8937, 4320, 4343, 4324, 4328, 4330, 8937,
910 4342, 8937, 4351, 4353, 4340, 4345, 8937, 4355, 4339, 4362,
911 4372, 4364, 4363, 4368, 4369, 4378, 4375, 4385, 4386, 4382,
912
913 4383, 4406, 4401, 4398, 4412, 4403, 4393, 4419, 4402, 4425,
914 4405, 4429, 4432, 4428, 4433, 8937, 4437, 4435, 4430, 4444,
915 4449, 4452, 4445, 4460, 4472, 4453, 4462, 4474, 4476, 4464,
916 4488, 4487, 4491, 4478, 4499, 8937, 4493, 4502, 4494, 4500,
917 8937, 4511, 4504, 4521, 4523, 4518, 4512, 4520, 4533, 4540,
918 4519, 4542, 4538, 4568, 4517, 4548, 4563, 8937, 4543, 4551,
919 4562, 4569, 4561, 4578, 4579, 4575, 4590, 4597, 4589, 4595,
920 4592, 4585, 4580, 4612, 4602, 4625, 4618, 4630, 4603, 4627,
921 4628, 4629, 4620, 4613, 4616, 4635, 4637, 4646, 4654, 4655,
922 4653, 4647, 4650, 4657, 4648, 8937, 4672, 4659, 4678, 4686,
923
924 4673, 4675, 4677, 4685, 4681, 4692, 4684, 4711, 4705, 8937,
925 4709, 8937, 4700, 4719, 4726, 4731, 4727, 4715, 4732, 4737,
926 4728, 4738, 4740, 4756, 4744, 4753, 4764, 4751, 4765, 4766,
927 4749, 4779, 4762, 4768, 4767, 4772, 4771, 4791, 8937, 8937,
928 4780, 4792, 4814, 4795, 4807, 4812, 4820, 4819, 4818, 4806,
929 4832, 4809, 4825, 8937, 4842, 4834, 4838, 4852, 4845, 4846,
930 4863, 4871, 4862, 4873, 4868, 8937, 4850, 4861, 4876, 4865,
931 4890, 4886, 8937, 4877, 8937, 4887, 4888, 4900, 4901, 4869,
932 4898, 4902, 4904, 4919, 4926, 4927, 4917, 4923, 4912, 4924,
933 4922, 4934, 4929, 4933, 4936, 4944, 8937, 4948, 4938, 4960,
934
935 4961, 4965, 4967, 4968, 4953, 8937, 4969, 4963, 4973, 4979,
936 4974, 4983, 4984, 4993, 5005, 4997, 5003, 4995, 4996, 5022,
937 5006, 5001, 5020, 5021, 5024, 5031, 8937, 5030, 5028, 5043,
938 5040, 5032, 5048, 5049, 5036, 5038, 5051, 5054, 5061, 5063,
939 5064, 5062, 5065, 5077, 5075, 5078, 5101, 5089, 5088, 5085,
940 5091, 5087, 8937, 5100, 5104, 5090, 5121, 5118, 5125, 5122,
941 5129, 5116, 5138, 5140, 5130, 5133, 5139, 5158, 5147, 5152,
942 8937, 5149, 5146, 5163, 5144, 5167, 5172, 5174, 5178, 5182,
943 5194, 5168, 5173, 5185, 5184, 8937, 5192, 5189, 5196, 5211,
944 5199, 5191, 5215, 5209, 5216, 5217, 5201, 5231, 5219, 5223,
945
946 5246, 5248, 5233, 8937, 8937, 5252, 5230, 5254, 8937, 5256,
947 5240, 5267, 5268, 5249, 5262, 5264, 5260, 5258, 5285, 5273,
948 5287, 8937, 5288, 5283, 5281, 5295, 5310, 5311, 5307, 5304,
949 5308, 5296, 5300, 5306, 5321, 5314, 5313, 5341, 5326, 5330,
950 5327, 5334, 5351, 8937, 5336, 5338, 5345, 5352, 5343, 5358,
951 8937, 5348, 5376, 5375, 5377, 5364, 5384, 5379, 5392, 5372,
952 5382, 5378, 5405, 5394, 5398, 5389, 5411, 5407, 5401, 5428,
953 5423, 8937, 5421, 5420, 5413, 5435, 8937, 5442, 5449, 5448,
954 5451, 5438, 5447, 5454, 5456, 8937, 5455, 5457, 5458, 5446,
955 5473, 5450, 5485, 5481, 5475, 8937, 5477, 5476, 5491, 8937,
956
957 5498, 5504, 5490, 5492, 5500, 5511, 5503, 5502, 5515, 5517,
958 8937, 5519, 8937, 5530, 5523, 5536, 8937, 5527, 5528, 5538,
959 5541, 5547, 5544, 5553, 5542, 5552, 5555, 5550, 5560, 5554,
960 5557, 5584, 5595, 5574, 5582, 5576, 5579, 8937, 5596, 5580,
961 5590, 5603, 5601, 5600, 5611, 5609, 5602, 8937, 8937, 5613,
962 8937, 5630, 5618, 5627, 8937, 5629, 5635, 5651, 5631, 5646,
963 5650, 5653, 5655, 8937, 5657, 5645, 5661, 5665, 5659, 5662,
964 5673, 5675, 5684, 5671, 5686, 5698, 8937, 5679, 5691, 5705,
965 5689, 5695, 5706, 5714, 5700, 8937, 5716, 5727, 5722, 5730,
966 5731, 8937, 5728, 8937, 5732, 5736, 5739, 5758, 5734, 8937,
967
968 5766, 5755, 5752, 5744, 5771, 5772, 5778, 5779, 5763, 5780,
969 5791, 5787, 5762, 5786, 8937, 5785, 5795, 5788, 5815, 5802,
970 5803, 5825, 5819, 5826, 5814, 5829, 5833, 5822, 5838, 5846,
971 5831, 5830, 5836, 8937, 5859, 5867, 5849, 5880, 5873, 5865,
972 8937, 5866, 5874, 5883, 8937, 5872, 5864, 5881, 5887, 5895,
973 5898, 5902, 5905, 5906, 8937, 5908, 5911, 5904, 5922, 5925,
974 5917, 8937, 8937, 5936, 8937, 5931, 5933, 5944, 5943, 5914,
975 5953, 5965, 5958, 5968, 5954, 5970, 5971, 5964, 5957, 6007,
976 5907, 5983, 5969, 5982, 5985, 8937, 8937, 5987, 6010, 5999,
977 5993, 6012, 6003, 6000, 6021, 6014, 6022, 6024, 6026, 6027,
978
979 8937, 6029, 6035, 6039, 6037, 8937, 6034, 6042, 6044, 6050,
980 6063, 6054, 6060, 6053, 6070, 6056, 6079, 6081, 6074, 6083,
981 6087, 6084, 6090, 6093, 6091, 6101, 6107, 8937, 6114, 6102,
982 6105, 6103, 6111, 6118, 6106, 6130, 6123, 8937, 6128, 6139,
983 6147, 6153, 6145, 6146, 6148, 6162, 6159, 6165, 6166, 6155,
984 6175, 6182, 6177, 6173, 8937, 6179, 6187, 6190, 6185, 6196,
985 6198, 6200, 6199, 6195, 6201, 6205, 6211, 6215, 6229, 6217,
986 6221, 6222, 6214, 8937, 6234, 6235, 6226, 6250, 6237, 6246,
987 6248, 6253, 6259, 6249, 6256, 6265, 6267, 8937, 6270, 6262,
988 6272, 6289, 6274, 6281, 6283, 6276, 6292, 8937, 6302, 6286,
989
990 6297, 6295, 6303, 6305, 6299, 6327, 6326, 6336, 6339, 8937,
991 6329, 6340, 6344, 6312, 6333, 6353, 6356, 6317, 8937, 6370,
992 6372, 6363, 6352, 6360, 6387, 6380, 6384, 6366, 6379, 6393,
993 6386, 6394, 6400, 6401, 6411, 6399, 6405, 6413, 8937, 6404,
994 8937, 6406, 6428, 6439, 6434, 6436, 6426, 8937, 6431, 6433,
995 6445, 6442, 6450, 8937, 6452, 6438, 6456, 6455, 8937, 6475,
996 6480, 6468, 6477, 6487, 6491, 8937, 6490, 6493, 6494, 6498,
997 6502, 6497, 6500, 6495, 6507, 6501, 6516, 6512, 6510, 6515,
998 6518, 6536, 8937, 6540, 6543, 6547, 6545, 6539, 6529, 6551,
999 6552, 6556, 8937, 6557, 6533, 6534, 6571, 6560, 6566, 6583,
1000
1001 6570, 6584, 6574, 8937, 6582, 6579, 6597, 6604, 6599, 6598,
1002 8937, 8937, 6589, 6613, 6605, 6610, 6617, 8937, 6616, 6628,
1003 6621, 6638, 6630, 8937, 8937, 6642, 8937, 6631, 8937, 6632,
1004 6634, 8937, 8937, 6647, 6627, 6651, 6657, 6664, 8937, 6667,
1005 8937, 6673, 6669, 6655, 6659, 6680, 8937, 6668, 6663, 6672,
1006 8937, 6679, 6697, 6683, 6678, 8937, 6703, 6706, 6692, 6686,
1007 8937, 6715, 6717, 6713, 6705, 6712, 6720, 6724, 6708, 6727,
1008 6734, 6732, 6735, 6751, 6757, 6758, 6760, 6763, 6753, 6748,
1009 6762, 6768, 6770, 6764, 6774, 6752, 6761, 6781, 6783, 6800,
1010 6805, 6795, 6797, 6804, 6803, 6787, 6812, 6796, 6798, 6819,
1011
1012 6826, 6794, 6821, 6824, 6825, 6836, 6828, 6853, 6847, 6842,
1013 6843, 8937, 6848, 6838, 6855, 6868, 6845, 6874, 6883, 6873,
1014 6889, 6890, 8937, 6893, 8937, 6895, 6881, 6886, 6884, 6877,
1015 8937, 6882, 6907, 6905, 6908, 6922, 6913, 6910, 6916, 6920,
1016 6923, 6943, 8937, 6942, 6924, 6939, 6945, 8937, 6947, 6953,
1017 6949, 6959, 6954, 6963, 6964, 6966, 6969, 6960, 6962, 6992,
1018 6995, 7002, 6980, 6986, 6981, 6994, 6983, 6996, 7009, 7013,
1019 7017, 7018, 7024, 8937, 7012, 8937, 7023, 7019, 7021, 7029,
1020 7030, 7034, 7036, 8937, 8937, 7044, 7050, 7052, 7051, 7056,
1021 7067, 7065, 8937, 7057, 7071, 7068, 7060, 8937, 7070, 7083,
1022
1023 7084, 7086, 8937, 7078, 7079, 7105, 7089, 7095, 7107, 7113,
1024 7099, 7111, 7112, 7119, 8937, 8937, 8937, 8937, 7120, 7101,
1025 7125, 7116, 7131, 7128, 7133, 7149, 7138, 8937, 7157, 8937,
1026 8937, 7154, 7156, 7148, 7158, 7160, 7147, 7164, 7169, 8937,
1027 7152, 7165, 7193, 7184, 7178, 7182, 7201, 7195, 7203, 7188,
1028 7189, 7007, 7205, 7211, 7204, 7209, 7213, 7217, 8937, 8937,
1029 7229, 7218, 7220, 7248, 7222, 7246, 7238, 7226, 7253, 7250,
1030 7249, 7244, 7254, 7239, 7266, 7268, 7265, 7271, 8937, 7267,
1031 7261, 8937, 7278, 8937, 7269, 7295, 7284, 7291, 7294, 7297,
1032 7307, 7305, 8937, 8937, 8937, 7293, 7289, 7296, 7313, 7318,
1033
1034 7316, 7311, 7319, 7328, 8937, 7329, 8937, 7330, 7345, 7348,
1035 7333, 7356, 7359, 7364, 7361, 7354, 7360, 8937, 7357, 7355,
1036 8937, 7363, 7382, 7383, 8937, 7372, 7352, 7378, 7380, 8937,
1037 7401, 7399, 7397, 8937, 7404, 8937, 7386, 7407, 7405, 7416,
1038 8937, 7388, 7413, 8937, 7418, 7419, 7424, 7409, 8937, 7420,
1039 8937, 7428, 7437, 7441, 7450, 7443, 7452, 7440, 7439, 7445,
1040 7461, 7460, 7467, 8937, 8937, 73, 7478, 7466, 7454, 7456,
1041 7484, 7468, 7472, 7487, 7482, 8937, 8937, 7495, 8937, 7488,
1042 7499, 8937, 7479, 7505, 7506, 7503, 7514, 7510, 7516, 7498,
1043 7513, 7524, 7539, 7530, 7526, 7541, 7559, 7533, 7556, 7557,
1044
1045 7560, 7563, 7566, 7546, 7565, 7554, 7569, 7571, 7555, 7579,
1046 8937, 7578, 7597, 7585, 8937, 7604, 7601, 7609, 7605, 8937,
1047 7611, 7606, 7607, 7612, 8937, 7596, 7613, 7625, 7635, 7630,
1048 7651, 7634, 7640, 7646, 8937, 8937, 8937, 7648, 7654, 8937,
1049 7655, 7652, 7633, 7641, 8937, 7656, 7657, 8937, 8937, 7662,
1050 7661, 7671, 7668, 8937, 7678, 8937, 7673, 8937, 7696, 7697,
1051 7698, 7695, 8937, 7703, 7705, 8937, 7707, 7710, 7711, 7718,
1052 7692, 7721, 7715, 8937, 7746, 7738, 7739, 7749, 7732, 7741,
1053 7730, 7747, 7737, 7761, 7733, 7762, 8937, 7759, 7764, 7767,
1054 7774, 7765, 7766, 7777, 8937, 7783, 8937, 7782, 7785, 7796,
1055
1056 7778, 7790, 7788, 7805, 7811, 7792, 7803, 7801, 8937, 7821,
1057 7826, 8937, 7808, 8937, 7831, 8937, 7823, 7825, 7828, 7832,
1058 8937, 7836, 7822, 7834, 7827, 8937, 7850, 7848, 7853, 7860,
1059 8937, 8937, 7847, 7870, 7871, 7859, 7879, 7882, 7863, 7885,
1060 7880, 7884, 7868, 7875, 7873, 7889, 7894, 7896, 7902, 7912,
1061 8937, 8937, 8937, 7910, 7897, 7930, 7926, 7924, 7935, 7915,
1062 8937, 7929, 7936, 7938, 7928, 7940, 7941, 7945, 8937, 7952,
1063 7948, 7921, 7956, 7950, 7957, 7962, 8937, 7978, 7980, 7977,
1064 7967, 7983, 7987, 7990, 7992, 7994, 8937, 7995, 8937, 8937,
1065 7993, 8937, 7975, 7979, 7989, 8017, 8937, 8000, 8009, 8005,
1066
1067 8004, 8029, 8030, 8937, 8038, 8014, 8016, 8032, 8937, 8937,
1068 8042, 8937, 8046, 8043, 8033, 8054, 8039, 8045, 8055, 8058,
1069 8937, 8056, 8057, 8062, 8059, 8073, 8937, 8060, 8069, 8072,
1070 8081, 8937, 8075, 8089, 8094, 8070, 8102, 8937, 8104, 8090,
1071 8118, 8117, 8937, 8103, 8113, 8937, 8937, 8114, 8124, 8121,
1072 8937, 8937, 8937, 8127, 8937, 8133, 8144, 8148, 8157, 8131,
1073 8937, 8159, 8143, 8149, 8937, 8937, 8145, 8146, 8162, 8164,
1074 8937, 8937, 8152, 8171, 8170, 8160, 8153, 8937, 8181, 8173,
1075 8184, 8183, 8202, 8188, 8201, 8204, 8219, 8212, 8193, 8207,
1076 8196, 8220, 8227, 8223, 8221, 8229, 8230, 8235, 8237, 8233,
1077
1078 8937, 8937, 8241, 8937, 8937, 8251, 8253, 8255, 8258, 8261,
1079 8266, 8267, 8937, 8262, 8270, 8263, 8264, 8254, 8937, 8256,
1080 8273, 8269, 8279, 8283, 8285, 8289, 8287, 8937, 8937, 8290,
1081 8302, 8294, 8306, 8291, 8937, 8312, 8328, 8310, 8321, 8311,
1082 8322, 8325, 8937, 8337, 8318, 8937, 8937, 8329, 8937, 8937,
1083 8937, 8937, 8937, 8937, 8937, 8937, 8347, 8937, 8333, 8358,
1084 8359, 8361, 8937, 8339, 8354, 8365, 8352, 8364, 8937, 8353,
1085 8371, 8370, 8381, 8379, 8386, 8380, 8385, 8397, 8368, 8391,
1086 8402, 8392, 8410, 8405, 8403, 8420, 8937, 8937, 8937, 8413,
1087 8414, 8433, 8429, 8435, 8444, 8436, 8439, 8432, 8428, 8443,
1088
1089 8452, 8453, 8442, 8449, 8473, 8460, 8465, 8476, 8462, 8483,
1090 8471, 8469, 8490, 8937, 8478, 8937, 8479, 8937, 8937, 8495,
1091 8498, 8494, 8492, 8512, 8517, 8500, 8503, 8504, 8513, 8528,
1092 8532, 8937, 8515, 8526, 8937, 8520, 8529, 8937, 8531, 8530,
1093 8545, 8539, 8541, 8548, 8544, 8560, 8569, 8937, 8937, 8550,
1094 8556, 8561, 8582, 8579, 8590, 8585, 8588, 8594, 8595, 8583,
1095 8603, 8937, 8589, 8609, 8604, 8937, 8601, 8606, 8611, 8615,
1096 8616, 8613, 8620, 8610, 8937, 8643, 8937, 8619, 8642, 8648,
1097 8630, 8636, 8645, 8659, 8662, 8652, 8937, 8647, 8663, 8669,
1098 8676, 8682, 8679, 8686, 8678, 8668, 8694, 8696, 8701, 8695,
1099
1100 8700, 8689, 8709, 8711, 8937, 8712, 8713, 8937, 8726, 8728,
1101 8718, 8723, 8716, 8937, 8719, 8729, 8735, 8746, 8749, 8744,
1102 8937, 8752, 8761, 8756, 8937, 8760, 8937, 8937, 8762, 8753,
1103 8758, 8766, 8768, 8937, 8937, 8937, 8817, 8824, 8831, 8838,
1104 8845, 8852, 8859, 102, 8866, 8873, 8880, 8887, 8894, 8901,
1105 8908, 8915, 8922, 8929
10721106 } ;
10731107
1074 static const flex_int16_t yy_def[3000] =
1108 static const flex_int16_t yy_def[3155] =
10751109 { 0,
1076 2985, 1, 2986, 2986, 2987, 2987, 2988, 2988, 2989, 2989,
1077 2990, 2990, 2985, 2991, 2985, 2985, 2985, 2985, 2992, 2991,
1078 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1079 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1080 2991, 2991, 2993, 2985, 2985, 2985, 2993, 2994, 2985, 2985,
1081 2985, 2994, 2995, 2985, 2985, 2985, 2985, 2995, 2996, 2985,
1082 2985, 2985, 2996, 2997, 2985, 2998, 2985, 2997, 2997, 2991,
1083 2991, 2985, 2999, 2992, 2999, 2992, 2991, 2991, 2991, 2991,
1084 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1085 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1086
1087 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1088 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1089 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1090 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1091 2993, 2993, 2994, 2994, 2995, 2995, 2985, 2996, 2996, 2997,
1092 2997, 2998, 2998, 2997, 2991, 2991, 2991, 2991, 2991, 2991,
1093 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1094 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1095 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1096 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1097
1098 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1099 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1100 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1101 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1102 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, 2991,
1103 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1104 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1105 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1106 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1107 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1108
1109 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1110 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1111 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1112 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1113 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1114 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, 2991,
1115 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1116 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1117 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1118 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1119
1120 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1121 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1122 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1123 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1124 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1125 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1126 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1127 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1128 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1129 2991, 2991, 2991, 2991, 2985, 2991, 2997, 2991, 2991, 2991,
1130
1131 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1132 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1133 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1134 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1135 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1136 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1137 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1138 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1139 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1140 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1141
1142 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1143 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1144 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1145 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1146 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1147 2991, 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991,
1148 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1149 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1150 2991, 2985, 2991, 2985, 2985, 2991, 2985, 2985, 2991, 2991,
1151 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1152
1153 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1154 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1155 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1156 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1157 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1158 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1159 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1160 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1161 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1162 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1163
1164 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1165 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1166 2991, 2991, 2991, 2997, 2991, 2991, 2991, 2991, 2991, 2991,
1167 2991, 2985, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1168 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1169 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1170 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1171 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1172 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1173 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1174
1175 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991,
1176 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991,
1177 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1178 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1179 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1180 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1181 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1182 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1183 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1184 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2997, 2991,
1185
1186 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1187 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1188 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1189 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1190 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1191 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1192 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991,
1193 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1194 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1195 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1196
1197 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1198 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1199 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1200 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1201 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1202 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1203 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1204 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1205 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1206 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1207
1208 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1209 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1210 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1211 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1212 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1213 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1214 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1215 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1216 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1217 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1218
1219 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1220 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991,
1221 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2985,
1222 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1223 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1224 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1225 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1226 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1227 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1228 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1229
1230 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1231 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1232 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1233 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1234 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991,
1235 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1236 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1237 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1238 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1239 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1240
1241 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991,
1242 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1243 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1244 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1245 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1246 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1247 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1248 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1249 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1250 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1251
1252 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1253 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1254 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1255 2985, 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1256 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1257 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1258 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1259 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1260 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1261 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1262
1263 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1264 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1265 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991,
1266 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991,
1267 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1268 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1269 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985, 2991,
1270 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1271 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991,
1272 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1273
1274 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1275 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1276 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1277 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991,
1278 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1279 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1280 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1281 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1282 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1283 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1284
1285 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, 2991,
1286 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1287 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1288 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1289 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1290 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1291 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1292 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1293 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1294 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1295
1296 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1297 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1298 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1299 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1300 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1301 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1302 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991,
1303 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1304 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1305 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1306
1307 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1308 2991, 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991,
1309 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2985,
1310 2991, 2985, 2991, 2985, 2991, 2991, 2985, 2985, 2991, 2991,
1311 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991,
1312 2991, 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1313 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1314 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1315 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1316 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1317
1318 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1319 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1320 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991,
1321 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1322 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1323 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1324 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1325 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991,
1326 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1327 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985,
1328
1329 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1330 2991, 2985, 2985, 2985, 2985, 2991, 2991, 2991, 2991, 2991,
1331 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2985, 2991, 2991,
1332 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1333 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1334 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991,
1335 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1336 2985, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991,
1337 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991,
1338 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991,
1339
1340 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1341 2991, 2985, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985,
1342 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991,
1343 2985, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991,
1344 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1345 2991, 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991,
1346 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2985, 2991, 2991,
1347 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1348 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1349 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985,
1350
1351 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985,
1352 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985,
1353 2985, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991,
1354 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2985,
1355 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2985,
1356 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1357 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1358 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991,
1359 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1360 2985, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2985,
1361
1362 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985, 2985,
1363 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1364 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985,
1365 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1366 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2985,
1367 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1368 2991, 2985, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2985,
1369 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1370 2985, 2985, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991,
1371 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1372
1373 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2985,
1374 2991, 2991, 2985, 2985, 2991, 2991, 2991, 2985, 2985, 2985,
1375 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991,
1376 2991, 2985, 2991, 2991, 2991, 2991, 2985, 2985, 2991, 2991,
1377 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991,
1378 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1379 2991, 2991, 2985, 2985, 2991, 2985, 2985, 2991, 2991, 2991,
1380 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1381 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1382 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1383
1384 2991, 2991, 2991, 2991, 2985, 2991, 2985, 2985, 2985, 2985,
1385 2985, 2985, 2985, 2985, 2991, 2985, 2991, 2991, 2991, 2991,
1386 2985, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991,
1387 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1388 2991, 2991, 2985, 2985, 2985, 2991, 2991, 2991, 2991, 2991,
1389 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1390 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2985,
1391 2991, 2985, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1392 2991, 2991, 2991, 2985, 2991, 2991, 2985, 2991, 2991, 2985,
1393 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2985, 2991,
1394
1395 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1396 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991,
1397 2991, 2991, 2991, 2985, 2991, 2985, 2991, 2991, 2991, 2991,
1398 2991, 2991, 2991, 2991, 2991, 2985, 2991, 2991, 2991, 2991,
1399 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991, 2991,
1400 2991, 2991, 2991, 2985, 2991, 2991, 2985, 2991, 2991, 2991,
1401 2991, 2991, 2985, 2991, 2991, 2991, 2991, 2991, 2991, 2985,
1402 2991, 2991, 2991, 2985, 2991, 2985, 2985, 2991, 2991, 2991,
1403 2991, 2991, 2985, 2985, 0, 2985, 2985, 2985, 2985, 2985,
1404 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985
1405
1110 3136, 1, 3137, 3137, 3138, 3138, 3139, 3139, 3140, 3140,
1111 3141, 3141, 3142, 3142, 3143, 3143, 3136, 3144, 3136, 3136,
1112 3136, 3136, 3145, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1113 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1114 3144, 3144, 3144, 3144, 3144, 3144, 3146, 3136, 3136, 3136,
1115 3146, 3147, 3136, 3136, 3136, 3147, 3148, 3136, 3136, 3136,
1116 3136, 3148, 3149, 3136, 3136, 3136, 3149, 3150, 3136, 3151,
1117 3136, 3150, 3150, 3152, 3136, 3136, 3136, 3136, 3152, 3153,
1118 3136, 3136, 3136, 3153, 3144, 3144, 3136, 3154, 3145, 3154,
1119 3145, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1120
1121 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1122 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1123 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1124 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1125 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1126 3144, 3144, 3144, 3144, 3144, 3144, 3146, 3146, 3147, 3147,
1127 3148, 3148, 3136, 3149, 3149, 3150, 3150, 3151, 3151, 3150,
1128 3152, 3152, 3136, 3153, 3153, 3144, 3144, 3144, 3144, 3144,
1129 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1130 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1131
1132 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1133 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1134 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1135 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1136 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1137 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1138 3144, 3144, 3144, 3144, 3144, 3150, 3144, 3144, 3144, 3144,
1139 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1140 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1141 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1142
1143 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1144 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1145 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1146 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1147 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144,
1148 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1149 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136,
1150 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3150, 3144, 3144,
1151 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1152 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1153
1154 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1155 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1156 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1157 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1158 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1159 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1160 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1161 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1162 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1163 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1164
1165 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1166 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1167 3136, 3144, 3150, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1168 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1169 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1170 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1171 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1172 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1173 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1174 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1175
1176 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1177 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1178 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1179 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1180 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1181 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1182 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1183 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1184 3144, 3144, 3144, 3150, 3144, 3144, 3144, 3144, 3144, 3144,
1185 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1186
1187 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1188 3136, 3144, 3136, 3136, 3144, 3136, 3136, 3144, 3144, 3136,
1189 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1190 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1191 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1192 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1193 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1194 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1195 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1196 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1197
1198 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1199 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1200 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1201 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1202 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1203 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3150, 3144, 3144,
1204 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3136, 3144,
1205 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1206 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1207 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1208
1209 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1210 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1211 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1212 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1213 3144, 3144, 3136, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1214 3144, 3144, 3144, 3136, 3136, 3144, 3144, 3144, 3144, 3144,
1215 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1216 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1217 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1218 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1219
1220 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1221 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1222 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1223 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3150,
1224 3150, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1225 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1226 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136,
1227 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1228 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1229 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1230
1231 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136,
1232 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1233 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1234 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1235 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1236 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1237 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1238 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136,
1239 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1240 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136,
1241
1242 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1243 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1244 3144, 3144, 3144, 3144, 3136, 3150, 3144, 3144, 3144, 3144,
1245 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1246 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1247 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136,
1248 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1249 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1250 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1251 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1252
1253 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1254 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1255 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1256 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1257 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1258 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1259 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1260 3144, 3136, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3136,
1261 3144, 3136, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1262 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1263
1264 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1265 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3150, 3144, 3144,
1266 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1267 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1268 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1269 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1270 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1271 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1272 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1273 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1274
1275 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136,
1276 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1277 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1278 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3136,
1279 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1280 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1281 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1282 3144, 3144, 3136, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1283 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1284 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1285
1286 3144, 3144, 3144, 3144, 3144, 3136, 3150, 3144, 3144, 3144,
1287 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1288 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1289 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1290 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1291 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1292 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1293 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1294 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1295 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1296
1297 3144, 3144, 3144, 3136, 3136, 3144, 3144, 3144, 3136, 3144,
1298 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1299 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1300 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1301 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1302 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1303 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1304 3144, 3136, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1305 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1306 3144, 3144, 3144, 3150, 3144, 3136, 3144, 3144, 3144, 3136,
1307
1308 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1309 3136, 3144, 3136, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1310 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1311 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1312 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3136, 3144,
1313 3136, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1314 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1315 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1316 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1317 3144, 3136, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3136,
1318
1319 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1320 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1321 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1322 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1323 3136, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1324 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1325 3144, 3136, 3136, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1326 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3150, 3144,
1327 3144, 3144, 3144, 3144, 3144, 3136, 3136, 3144, 3144, 3144,
1328 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1329
1330 3136, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1331 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1332 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1333 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1334 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1335 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1336 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1337 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1338 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1339 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1340
1341 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136,
1342 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144,
1343 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1344 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144,
1345 3136, 3144, 3144, 3144, 3144, 3150, 3144, 3136, 3144, 3144,
1346 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3136, 3144,
1347 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1348 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1349 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1350 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1351
1352 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1353 3136, 3136, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1354 3144, 3144, 3144, 3136, 3136, 3144, 3136, 3144, 3136, 3144,
1355 3144, 3136, 3136, 3144, 3144, 3144, 3144, 3144, 3136, 3144,
1356 3136, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1357 3136, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1358 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1359 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1360 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1361 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1362
1363 3144, 3144, 3144, 3144, 3144, 3144, 3150, 3144, 3144, 3144,
1364 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1365 3144, 3144, 3136, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1366 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1367 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1368 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1369 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1370 3144, 3144, 3144, 3136, 3144, 3136, 3144, 3144, 3144, 3144,
1371 3144, 3144, 3144, 3136, 3136, 3144, 3144, 3144, 3144, 3144,
1372 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1373
1374 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1375 3144, 3144, 3144, 3144, 3136, 3136, 3136, 3136, 3144, 3144,
1376 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3136,
1377 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136,
1378 3144, 3144, 3144, 3144, 3144, 3144, 3150, 3144, 3144, 3144,
1379 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3136,
1380 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1381 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144,
1382 3144, 3136, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1383 3144, 3144, 3136, 3136, 3136, 3144, 3144, 3144, 3144, 3144,
1384
1385 3144, 3144, 3144, 3144, 3136, 3144, 3136, 3144, 3144, 3144,
1386 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1387 3136, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3136,
1388 3144, 3144, 3144, 3136, 3144, 3136, 3144, 3144, 3144, 3144,
1389 3136, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3136, 3144,
1390 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1391 3144, 3144, 3144, 3136, 3136, 3150, 3144, 3144, 3144, 3144,
1392 3144, 3144, 3144, 3144, 3144, 3136, 3136, 3144, 3136, 3144,
1393 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1394 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1395
1396 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1397 3136, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3136,
1398 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1399 3144, 3144, 3144, 3144, 3136, 3136, 3136, 3144, 3144, 3136,
1400 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3136, 3136, 3144,
1401 3144, 3144, 3144, 3136, 3144, 3136, 3144, 3136, 3144, 3144,
1402 3144, 3144, 3136, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1403 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1404 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1405 3144, 3144, 3144, 3144, 3136, 3144, 3136, 3144, 3144, 3144,
1406
1407 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144,
1408 3144, 3136, 3144, 3136, 3144, 3136, 3144, 3144, 3144, 3144,
1409 3136, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1410 3136, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1411 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1412 3136, 3136, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1413 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144,
1414 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1415 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3136, 3136,
1416 3144, 3136, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1417
1418 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3136, 3136,
1419 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1420 3136, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1421 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1422 3144, 3144, 3136, 3144, 3144, 3136, 3136, 3144, 3144, 3144,
1423 3136, 3136, 3136, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1424 3136, 3144, 3144, 3144, 3136, 3136, 3144, 3144, 3144, 3144,
1425 3136, 3136, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144,
1426 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1427 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1428
1429 3136, 3136, 3144, 3136, 3136, 3144, 3144, 3144, 3144, 3144,
1430 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3136, 3144,
1431 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3136, 3144,
1432 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144,
1433 3144, 3144, 3136, 3144, 3144, 3136, 3136, 3144, 3136, 3136,
1434 3136, 3136, 3136, 3136, 3136, 3136, 3144, 3136, 3144, 3144,
1435 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3136, 3144,
1436 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1437 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3136, 3136, 3144,
1438 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1439
1440 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1441 3144, 3144, 3144, 3136, 3144, 3136, 3144, 3136, 3136, 3144,
1442 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1443 3144, 3136, 3144, 3144, 3136, 3144, 3144, 3136, 3144, 3144,
1444 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3136, 3144,
1445 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1446 3144, 3136, 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144,
1447 3144, 3144, 3144, 3144, 3136, 3144, 3136, 3144, 3144, 3144,
1448 3144, 3144, 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3144,
1449 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144, 3144,
1450
1451 3144, 3144, 3144, 3144, 3136, 3144, 3144, 3136, 3144, 3144,
1452 3144, 3144, 3144, 3136, 3144, 3144, 3144, 3144, 3144, 3144,
1453 3136, 3144, 3144, 3144, 3136, 3144, 3136, 3136, 3144, 3144,
1454 3144, 3144, 3144, 3136, 3136, 0, 3136, 3136, 3136, 3136,
1455 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
1456 3136, 3136, 3136, 3136
14061457 } ;
14071458
1408 static const flex_int16_t yy_nxt[8542] =
1459 static const flex_int16_t yy_nxt[9004] =
14091460 { 0,
1410 14, 15, 16, 17, 18, 19, 18, 14, 14, 14,
1411 14, 14, 18, 20, 21, 22, 23, 24, 25, 14,
1412 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
1413 36, 37, 38, 39, 40, 14, 14, 14, 41, 42,
1414 20, 21, 22, 23, 24, 25, 14, 26, 27, 28,
1415 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
1416 39, 40, 14, 14, 14, 41, 44, 45, 46, 44,
1417 45, 46, 49, 50, 49, 50, 51, 102, 51, 54,
1418 55, 56, 57, 70, 18, 54, 55, 56, 57, 71,
1419 18, 60, 61, 62, 60, 61, 62, 72, 82, 92,
1420
1421 151, 73, 104, 47, 102, 151, 47, 141, 141, 52,
1422 75, 52, 75, 75, 71, 75, 72, 58, 149, 93,
1423 73, 75, 71, 58, 71, 82, 92, 103, 63, 104,
1424 94, 63, 15, 16, 17, 65, 66, 67, 15, 16,
1425 17, 65, 66, 67, 95, 112, 93, 118, 76, 71,
1426 143, 71, 68, 143, 103, 83, 71, 94, 68, 147,
1427 71, 146, 84, 148, 148, 96, 85, 141, 141, 86,
1428 69, 95, 112, 97, 118, 155, 69, 144, 156, 68,
1429 105, 71, 83, 375, 160, 68, 77, 78, 106, 84,
1430 79, 71, 96, 85, 107, 80, 86, 140, 108, 71,
1431
1432 97, 71, 155, 154, 81, 156, 71, 105, 71, 71,
1433 71, 160, 71, 77, 78, 106, 151, 79, 157, 142,
1434 159, 107, 80, 98, 140, 108, 99, 71, 158, 1290,
1435 154, 81, 87, 100, 143, 101, 88, 143, 71, 89,
1436 71, 90, 91, 71, 109, 157, 71, 159, 110, 224,
1437 98, 202, 163, 99, 71, 158, 129, 71, 130, 87,
1438 100, 71, 101, 88, 111, 71, 89, 131, 90, 91,
1439 71, 109, 137, 132, 133, 110, 138, 164, 202, 163,
1440 139, 71, 71, 129, 134, 130, 218, 71, 135, 136,
1441 1042, 111, 113, 165, 131, 71, 114, 71, 71, 137,
1442
1443 132, 133, 115, 138, 164, 116, 71, 139, 169, 170,
1444 172, 134, 117, 218, 71, 135, 136, 71, 71, 113,
1445 165, 71, 70, 114, 70, 70, 171, 70, 246, 115,
1446 151, 71, 116, 70, 149, 169, 170, 172, 161, 117,
1447 119, 182, 247, 145, 120, 145, 145, 150, 145, 150,
1448 150, 162, 150, 171, 121, 122, 75, 123, 75, 75,
1449 71, 75, 71, 147, 71, 161, 71, 119, 182, 247,
1450 180, 120, 70, 173, 70, 70, 146, 70, 162, 71,
1451 144, 121, 122, 70, 123, 124, 200, 75, 125, 75,
1452 75, 174, 75, 175, 153, 126, 166, 180, 75, 127,
1453
1454 128, 176, 167, 184, 168, 71, 71, 71, 71, 71,
1455 181, 189, 124, 200, 183, 125, 71, 71, 174, 71,
1456 175, 142, 126, 166, 313, 76, 127, 128, 176, 167,
1457 184, 168, 177, 178, 199, 190, 71, 181, 191, 185,
1458 179, 183, 186, 71, 197, 71, 71, 71, 71, 198,
1459 192, 313, 71, 201, 194, 187, 188, 71, 195, 177,
1460 178, 199, 190, 71, 203, 191, 185, 179, 346, 186,
1461 193, 197, 71, 71, 196, 204, 198, 192, 71, 205,
1462 201, 194, 187, 188, 71, 195, 71, 206, 207, 71,
1463 208, 203, 212, 211, 209, 71, 71, 193, 210, 71,
1464
1465 71, 196, 204, 213, 148, 148, 205, 2985, 2985, 2985,
1466 71, 71, 217, 214, 206, 207, 71, 208, 71, 212,
1467 211, 209, 215, 219, 71, 210, 225, 220, 216, 223,
1468 213, 71, 145, 2985, 145, 145, 71, 145, 221, 217,
1469 214, 71, 222, 71, 226, 2985, 229, 231, 234, 215,
1470 219, 71, 232, 225, 220, 216, 223, 230, 71, 71,
1471 71, 227, 233, 238, 228, 221, 71, 240, 71, 222,
1472 71, 226, 235, 229, 231, 234, 239, 241, 71, 232,
1473 242, 236, 71, 243, 230, 2985, 71, 2985, 227, 233,
1474 238, 228, 2985, 237, 240, 244, 71, 71, 71, 235,
1475
1476 2985, 245, 71, 239, 241, 253, 264, 242, 236, 150,
1477 243, 150, 150, 75, 150, 75, 75, 248, 75, 151,
1478 237, 249, 244, 71, 71, 252, 71, 250, 245, 254,
1479 255, 256, 253, 71, 251, 2985, 257, 71, 71, 259,
1480 263, 71, 71, 71, 248, 260, 71, 258, 249, 273,
1481 1170, 153, 252, 71, 250, 262, 254, 255, 256, 275,
1482 261, 251, 71, 257, 265, 71, 71, 263, 266, 276,
1483 274, 71, 260, 277, 258, 71, 273, 71, 71, 279,
1484 71, 71, 262, 278, 2985, 267, 275, 261, 71, 2985,
1485 71, 71, 71, 281, 2985, 266, 276, 274, 2985, 282,
1486
1487 277, 283, 2985, 297, 2985, 284, 287, 280, 2985, 2985,
1488 278, 71, 267, 268, 71, 71, 71, 71, 269, 288,
1489 281, 71, 285, 270, 2985, 286, 282, 2985, 283, 271,
1490 272, 289, 284, 287, 280, 71, 71, 71, 294, 2985,
1491 268, 71, 290, 296, 295, 269, 288, 291, 301, 285,
1492 270, 71, 286, 71, 71, 298, 271, 272, 289, 292,
1493 71, 293, 299, 303, 304, 294, 307, 2985, 71, 290,
1494 296, 295, 302, 300, 291, 308, 309, 306, 305, 71,
1495 71, 71, 298, 71, 310, 2985, 292, 311, 293, 2985,
1496 315, 2985, 312, 317, 71, 71, 71, 71, 71, 302,
1497
1498 300, 318, 308, 314, 306, 305, 71, 71, 71, 319,
1499 71, 71, 71, 316, 311, 71, 71, 315, 71, 312,
1500 317, 320, 321, 326, 322, 323, 330, 333, 318, 2985,
1501 314, 71, 71, 324, 71, 71, 319, 327, 325, 71,
1502 316, 338, 329, 328, 339, 71, 71, 71, 320, 321,
1503 326, 322, 323, 331, 332, 335, 334, 340, 71, 71,
1504 336, 71, 71, 71, 327, 71, 71, 337, 338, 329,
1505 328, 341, 342, 343, 347, 71, 71, 71, 344, 71,
1506 331, 332, 335, 334, 345, 71, 349, 336, 71, 71,
1507 350, 71, 352, 354, 337, 355, 71, 348, 341, 353,
1508
1509 343, 360, 2985, 71, 71, 344, 71, 351, 151, 356,
1510 71, 345, 361, 358, 364, 71, 357, 350, 71, 352,
1511 354, 71, 355, 71, 348, 359, 353, 362, 71, 71,
1512 365, 363, 366, 71, 351, 71, 356, 368, 367, 371,
1513 358, 369, 71, 357, 71, 71, 71, 71, 372, 71,
1514 71, 373, 359, 71, 362, 374, 379, 365, 363, 366,
1515 71, 370, 380, 71, 368, 367, 377, 71, 369, 378,
1516 376, 71, 71, 383, 71, 372, 71, 381, 373, 71,
1517 382, 71, 374, 379, 384, 385, 386, 388, 370, 380,
1518 387, 71, 71, 377, 391, 71, 378, 376, 71, 393,
1519
1520 383, 71, 392, 71, 381, 389, 394, 382, 398, 2985,
1521 2985, 397, 385, 71, 395, 71, 71, 387, 71, 71,
1522 71, 391, 390, 71, 71, 71, 399, 408, 71, 392,
1523 396, 71, 389, 394, 71, 398, 71, 400, 397, 401,
1524 407, 395, 402, 2985, 403, 404, 71, 417, 410, 390,
1525 71, 71, 409, 399, 71, 71, 405, 396, 2985, 71,
1526 419, 423, 71, 71, 400, 71, 401, 407, 418, 402,
1527 71, 403, 404, 406, 417, 410, 71, 71, 424, 409,
1528 71, 425, 71, 405, 2985, 71, 2985, 419, 423, 420,
1529 430, 421, 71, 2985, 428, 418, 71, 426, 427, 429,
1530
1531 406, 411, 436, 2985, 412, 424, 2985, 422, 425, 413,
1532 414, 415, 416, 71, 71, 433, 420, 430, 421, 71,
1533 431, 437, 71, 432, 426, 427, 71, 71, 411, 71,
1534 71, 412, 438, 434, 422, 435, 413, 414, 415, 416,
1535 439, 440, 433, 71, 2985, 445, 441, 431, 437, 442,
1536 432, 71, 71, 71, 444, 2985, 451, 71, 71, 438,
1537 434, 71, 435, 71, 443, 450, 71, 439, 440, 2985,
1538 2985, 71, 446, 441, 447, 449, 442, 71, 452, 2985,
1539 457, 444, 71, 448, 453, 462, 465, 71, 71, 463,
1540 454, 443, 450, 71, 455, 2985, 456, 464, 71, 446,
1541
1542 71, 447, 449, 71, 466, 452, 71, 457, 2985, 458,
1543 448, 453, 462, 71, 467, 71, 463, 454, 71, 555,
1544 468, 455, 459, 456, 469, 460, 71, 461, 477, 71,
1545 479, 466, 470, 71, 478, 71, 458, 481, 71, 2985,
1546 71, 467, 71, 2985, 480, 484, 71, 468, 2985, 459,
1547 71, 469, 460, 502, 461, 477, 71, 479, 71, 470,
1548 471, 478, 472, 493, 481, 492, 500, 482, 494, 2985,
1549 497, 480, 484, 495, 496, 473, 151, 71, 474, 2985,
1550 475, 71, 476, 483, 71, 71, 71, 471, 498, 472,
1551 493, 71, 492, 500, 482, 71, 71, 497, 523, 524,
1552
1553 71, 496, 473, 2985, 499, 474, 501, 475, 2985, 476,
1554 483, 485, 486, 504, 71, 498, 71, 503, 71, 505,
1555 71, 487, 509, 488, 489, 490, 506, 71, 491, 71,
1556 508, 499, 71, 501, 71, 507, 71, 512, 485, 486,
1557 504, 511, 2985, 514, 503, 519, 505, 510, 487, 509,
1558 488, 489, 490, 71, 71, 491, 515, 508, 71, 71,
1559 513, 517, 507, 516, 512, 518, 2985, 520, 511, 71,
1560 71, 522, 71, 521, 510, 71, 71, 71, 71, 525,
1561 526, 531, 71, 515, 71, 527, 71, 513, 517, 528,
1562 516, 71, 518, 71, 520, 529, 71, 534, 522, 2985,
1563
1564 521, 535, 71, 532, 71, 536, 525, 526, 531, 71,
1565 537, 543, 527, 530, 539, 547, 528, 71, 533, 559,
1566 71, 71, 529, 71, 534, 538, 71, 71, 535, 71,
1567 532, 540, 536, 544, 71, 546, 545, 537, 543, 551,
1568 530, 539, 541, 549, 542, 533, 2985, 71, 548, 71,
1569 550, 71, 538, 71, 71, 71, 553, 556, 540, 71,
1570 544, 71, 546, 545, 71, 552, 551, 554, 560, 541,
1571 549, 542, 71, 71, 557, 548, 558, 550, 561, 71,
1572 562, 71, 71, 553, 556, 567, 71, 563, 71, 564,
1573 71, 71, 552, 574, 554, 560, 565, 571, 570, 568,
1574
1575 71, 557, 71, 558, 566, 561, 71, 562, 569, 71,
1576 572, 71, 567, 71, 563, 573, 564, 71, 575, 71,
1577 574, 71, 71, 565, 571, 570, 568, 577, 576, 581,
1578 71, 566, 579, 71, 71, 569, 578, 572, 580, 582,
1579 71, 71, 573, 583, 71, 575, 584, 589, 71, 591,
1580 71, 596, 2985, 71, 577, 576, 581, 71, 71, 579,
1581 585, 71, 586, 578, 587, 580, 582, 588, 590, 71,
1582 583, 71, 593, 584, 592, 71, 598, 2985, 596, 71,
1583 71, 71, 599, 601, 597, 71, 71, 585, 71, 586,
1584 594, 587, 602, 595, 588, 590, 71, 71, 600, 593,
1585
1586 604, 592, 607, 598, 605, 71, 609, 71, 71, 71,
1587 601, 597, 608, 71, 71, 603, 606, 594, 610, 611,
1588 595, 71, 614, 612, 71, 600, 71, 604, 71, 607,
1589 71, 605, 613, 609, 71, 71, 71, 623, 2985, 608,
1590 71, 71, 603, 606, 71, 610, 611, 625, 2985, 614,
1591 612, 2985, 2985, 626, 624, 632, 656, 627, 2985, 613,
1592 615, 71, 2985, 2985, 623, 616, 71, 617, 71, 640,
1593 71, 631, 628, 618, 625, 619, 71, 71, 620, 621,
1594 626, 624, 632, 71, 627, 622, 71, 615, 71, 629,
1595 633, 634, 616, 630, 617, 71, 640, 635, 631, 628,
1596
1597 618, 71, 619, 637, 638, 620, 621, 636, 2985, 71,
1598 641, 71, 622, 643, 71, 639, 629, 633, 634, 71,
1599 630, 642, 649, 71, 2985, 650, 644, 647, 71, 71,
1600 637, 638, 645, 646, 636, 71, 71, 641, 71, 71,
1601 643, 648, 639, 71, 71, 71, 71, 71, 642, 649,
1602 651, 652, 650, 644, 647, 653, 654, 655, 71, 645,
1603 646, 658, 659, 71, 657, 668, 662, 663, 648, 661,
1604 71, 667, 660, 71, 71, 71, 71, 651, 652, 71,
1605 151, 71, 653, 654, 655, 71, 664, 665, 658, 659,
1606 71, 657, 666, 662, 663, 669, 661, 71, 71, 660,
1607
1608 71, 670, 671, 672, 674, 673, 2985, 2985, 686, 684,
1609 71, 71, 71, 664, 665, 675, 71, 71, 71, 666,
1610 676, 681, 669, 680, 685, 683, 682, 71, 677, 671,
1611 672, 674, 673, 71, 71, 678, 71, 71, 679, 71,
1612 71, 687, 675, 688, 71, 689, 71, 676, 690, 691,
1613 680, 71, 683, 71, 71, 677, 692, 695, 693, 2985,
1614 694, 698, 678, 697, 696, 679, 71, 71, 71, 71,
1615 71, 699, 700, 71, 701, 690, 691, 71, 71, 71,
1616 702, 71, 2985, 692, 695, 693, 71, 694, 698, 71,
1617 697, 696, 703, 704, 71, 705, 706, 71, 699, 707,
1618
1619 71, 701, 712, 2985, 71, 2985, 708, 702, 711, 714,
1620 715, 709, 71, 713, 71, 710, 2985, 71, 71, 703,
1621 704, 716, 71, 706, 718, 719, 707, 71, 71, 712,
1622 71, 71, 71, 708, 71, 711, 714, 715, 709, 717,
1623 713, 720, 710, 71, 726, 723, 2985, 721, 716, 724,
1624 727, 71, 719, 725, 731, 71, 71, 732, 728, 71,
1625 730, 71, 2985, 738, 2985, 71, 717, 71, 720, 722,
1626 71, 726, 723, 71, 721, 71, 724, 727, 71, 729,
1627 725, 731, 71, 733, 71, 728, 734, 730, 735, 736,
1628 737, 739, 744, 71, 71, 71, 722, 740, 743, 71,
1629
1630 745, 71, 741, 742, 747, 71, 729, 71, 748, 71,
1631 733, 749, 71, 734, 71, 735, 736, 737, 739, 744,
1632 746, 71, 71, 752, 740, 743, 750, 745, 753, 751,
1633 71, 71, 754, 71, 755, 748, 71, 756, 757, 758,
1634 760, 759, 2985, 71, 767, 71, 71, 746, 71, 71,
1635 71, 71, 761, 750, 763, 71, 751, 764, 71, 754,
1636 2985, 755, 762, 765, 756, 757, 769, 760, 759, 71,
1637 768, 71, 772, 773, 71, 71, 71, 71, 766, 761,
1638 71, 763, 774, 776, 764, 71, 770, 71, 71, 762,
1639 765, 771, 777, 769, 775, 778, 782, 768, 71, 772,
1640
1641 773, 71, 71, 779, 71, 766, 780, 71, 71, 774,
1642 776, 783, 71, 781, 71, 785, 787, 784, 71, 777,
1643 71, 775, 778, 788, 786, 71, 789, 71, 71, 791,
1644 779, 71, 792, 780, 71, 71, 71, 790, 783, 793,
1645 781, 71, 785, 787, 784, 71, 796, 794, 795, 71,
1646 788, 786, 798, 789, 71, 71, 71, 802, 797, 792,
1647 805, 71, 799, 71, 790, 71, 793, 71, 803, 71,
1648 804, 71, 806, 796, 794, 795, 807, 800, 801, 798,
1649 71, 71, 810, 71, 802, 797, 71, 805, 808, 799,
1650 809, 813, 71, 71, 811, 803, 71, 804, 814, 806,
1651
1652 812, 71, 71, 807, 800, 801, 815, 816, 817, 810,
1653 818, 71, 71, 820, 71, 808, 819, 809, 813, 71,
1654 71, 811, 824, 823, 822, 814, 71, 812, 821, 71,
1655 71, 71, 825, 815, 816, 817, 71, 818, 71, 826,
1656 820, 71, 71, 819, 151, 827, 828, 831, 829, 824,
1657 823, 822, 830, 71, 832, 821, 71, 835, 71, 825,
1658 71, 833, 71, 837, 71, 71, 826, 836, 838, 834,
1659 839, 71, 827, 828, 831, 829, 840, 71, 841, 830,
1660 842, 71, 71, 843, 71, 71, 844, 71, 833, 845,
1661 837, 2985, 71, 71, 836, 846, 834, 839, 867, 71,
1662
1663 71, 855, 847, 840, 848, 841, 71, 842, 71, 857,
1664 843, 71, 849, 71, 856, 71, 845, 2985, 71, 71,
1665 2985, 858, 846, 859, 71, 861, 860, 71, 855, 847,
1666 71, 848, 862, 875, 71, 2985, 857, 864, 2985, 849,
1667 850, 856, 71, 865, 851, 863, 71, 852, 858, 71,
1668 859, 71, 861, 860, 853, 71, 71, 854, 71, 862,
1669 875, 71, 71, 876, 864, 879, 866, 850, 2985, 71,
1670 865, 851, 863, 71, 852, 878, 877, 71, 2985, 880,
1671 2985, 853, 882, 2985, 854, 71, 883, 881, 885, 71,
1672 876, 884, 879, 866, 868, 869, 2985, 870, 71, 886,
1673
1674 871, 889, 878, 877, 888, 872, 71, 71, 71, 882,
1675 71, 873, 874, 883, 881, 885, 71, 71, 884, 887,
1676 71, 868, 869, 71, 870, 890, 886, 871, 889, 71,
1677 891, 888, 872, 71, 895, 892, 893, 894, 873, 874,
1678 898, 71, 71, 896, 71, 897, 887, 902, 904, 903,
1679 899, 2985, 890, 71, 900, 71, 71, 891, 71, 71,
1680 71, 895, 892, 893, 894, 907, 71, 898, 901, 71,
1681 896, 71, 897, 71, 908, 71, 903, 899, 905, 71,
1682 909, 900, 910, 906, 911, 2985, 913, 71, 2985, 2985,
1683 912, 915, 907, 916, 918, 901, 914, 2985, 2985, 922,
1684
1685 917, 925, 919, 71, 71, 920, 71, 71, 2985, 910,
1686 71, 2985, 71, 913, 71, 71, 71, 912, 71, 71,
1687 71, 918, 921, 914, 71, 71, 71, 917, 923, 919,
1688 71, 924, 920, 71, 926, 927, 928, 929, 930, 2985,
1689 937, 2985, 71, 931, 932, 938, 71, 933, 2985, 921,
1690 71, 935, 2985, 71, 71, 923, 71, 939, 924, 71,
1691 71, 926, 927, 928, 929, 930, 71, 71, 936, 71,
1692 931, 932, 71, 934, 933, 71, 940, 941, 935, 942,
1693 946, 947, 71, 71, 939, 71, 943, 2985, 71, 71,
1694 944, 2985, 2985, 948, 949, 936, 950, 71, 945, 71,
1695
1696 934, 2985, 71, 940, 941, 71, 942, 946, 71, 955,
1697 953, 951, 952, 943, 71, 71, 71, 944, 71, 71,
1698 948, 949, 954, 950, 956, 945, 2985, 71, 71, 71,
1699 957, 958, 960, 959, 961, 962, 955, 953, 951, 952,
1700 71, 71, 964, 966, 965, 967, 963, 968, 2985, 954,
1701 71, 956, 71, 71, 71, 71, 71, 957, 958, 969,
1702 959, 961, 962, 970, 71, 71, 71, 71, 971, 964,
1703 966, 965, 967, 963, 71, 71, 973, 972, 976, 974,
1704 975, 71, 977, 71, 71, 71, 969, 979, 71, 978,
1705 970, 980, 981, 982, 983, 971, 71, 990, 71, 2985,
1706
1707 984, 992, 71, 973, 972, 976, 974, 975, 71, 987,
1708 71, 989, 994, 996, 71, 985, 978, 71, 980, 71,
1709 988, 983, 991, 986, 71, 71, 71, 984, 992, 71,
1710 71, 71, 995, 998, 993, 999, 987, 71, 989, 71,
1711 71, 1000, 985, 997, 71, 1002, 71, 988, 71, 991,
1712 986, 1001, 71, 71, 1005, 71, 2985, 1004, 1003, 995,
1713 998, 993, 151, 71, 71, 1006, 1007, 1008, 1000, 71,
1714 997, 71, 1002, 71, 71, 1009, 71, 1010, 1001, 1019,
1715 71, 1005, 71, 71, 1004, 1003, 2985, 2985, 1017, 1018,
1716 1020, 71, 1006, 1007, 1008, 1021, 1027, 71, 1022, 2985,
1717
1718 2985, 1028, 1009, 2985, 1010, 1011, 1019, 1012, 1023, 1025,
1719 2985, 1013, 71, 1014, 71, 1017, 1018, 71, 1015, 1030,
1720 71, 71, 1021, 1016, 1024, 1022, 1026, 1034, 71, 71,
1721 1029, 71, 1011, 2985, 1012, 1023, 1025, 71, 1013, 71,
1722 1014, 1038, 71, 71, 1031, 1015, 1030, 1035, 1032, 71,
1723 1016, 1024, 1037, 1026, 1034, 1036, 71, 1029, 1033, 1039,
1724 71, 71, 71, 1040, 1043, 71, 1041, 1044, 1038, 2985,
1725 71, 1031, 71, 1045, 1035, 1032, 1055, 1046, 2985, 1037,
1726 1058, 71, 1036, 2985, 1054, 1033, 71, 1057, 1056, 1060,
1727 2985, 71, 2985, 71, 1044, 71, 71, 1066, 71, 71,
1728
1729 1045, 71, 71, 1055, 1046, 1047, 71, 1058, 71, 1061,
1730 1048, 1054, 1049, 1059, 1057, 1056, 1060, 1062, 1050, 1063,
1731 1064, 2985, 71, 1051, 1052, 71, 1065, 71, 1067, 71,
1732 1053, 71, 1047, 1068, 1069, 71, 1061, 1048, 1070, 1049,
1733 1059, 71, 1071, 1076, 1062, 1050, 1063, 71, 71, 71,
1734 1051, 1052, 71, 1065, 1072, 1067, 1073, 1053, 1074, 2985,
1735 1068, 1069, 71, 1078, 71, 1079, 1075, 1081, 1077, 1071,
1736 71, 71, 1080, 1083, 71, 71, 71, 71, 1084, 71,
1737 71, 1072, 1082, 1073, 1085, 1074, 71, 71, 71, 71,
1738 1078, 1086, 1079, 1075, 1081, 1077, 71, 1087, 1088, 1080,
1739
1740 1083, 1090, 71, 2985, 1089, 1084, 1091, 71, 1092, 1082,
1741 1093, 1085, 71, 71, 71, 71, 71, 1094, 1086, 1096,
1742 1095, 1097, 2985, 71, 1087, 1101, 71, 1098, 1090, 1100,
1743 71, 1089, 71, 1091, 1099, 1092, 1102, 1093, 2985, 1106,
1744 1103, 71, 1107, 71, 1094, 2985, 1096, 1095, 1097, 71,
1745 71, 71, 71, 1104, 1098, 71, 1100, 71, 1105, 1108,
1746 1109, 1099, 1112, 1102, 1110, 71, 1106, 1103, 1111, 1107,
1747 1113, 71, 1114, 71, 1115, 1116, 71, 71, 1117, 2985,
1748 2985, 71, 71, 71, 1118, 71, 1108, 1109, 1120, 1112,
1749 71, 1110, 1121, 1127, 1122, 1111, 1119, 1113, 71, 1124,
1750
1751 1123, 1115, 1125, 1126, 71, 1117, 71, 71, 71, 71,
1752 71, 1118, 71, 1128, 1130, 1120, 71, 1129, 1131, 1121,
1753 1127, 1122, 71, 1119, 71, 71, 1124, 1123, 71, 1125,
1754 1126, 1132, 1135, 1133, 71, 71, 1134, 2985, 1136, 1137,
1755 1128, 1130, 1139, 1140, 1129, 71, 1138, 1141, 71, 71,
1756 71, 71, 1142, 1143, 71, 1144, 71, 1147, 71, 1135,
1757 1133, 71, 1150, 1134, 71, 1136, 1137, 71, 1145, 1139,
1758 1140, 1146, 1148, 1138, 1141, 1151, 1149, 71, 1152, 1162,
1759 1163, 71, 1144, 71, 71, 71, 1153, 1155, 1154, 71,
1760 71, 1158, 1156, 71, 71, 1145, 71, 71, 1146, 1148,
1761
1762 1157, 1159, 1151, 1149, 71, 71, 71, 71, 1160, 1161,
1763 71, 71, 71, 1153, 1155, 1154, 71, 71, 1158, 1156,
1764 1164, 1165, 1166, 71, 71, 1167, 1168, 1157, 1159, 1169,
1765 1173, 1171, 71, 71, 1184, 1160, 1161, 1172, 71, 71,
1766 71, 1176, 1175, 71, 71, 1179, 1182, 1164, 1165, 71,
1767 71, 1178, 1167, 1168, 1177, 71, 1169, 1173, 1171, 1174,
1768 71, 71, 1180, 71, 1172, 1181, 71, 71, 71, 1175,
1769 1183, 1185, 1179, 71, 1186, 1187, 2985, 71, 1178, 1192,
1770 1189, 1177, 1188, 71, 71, 1190, 1174, 1193, 1191, 1180,
1771 2985, 71, 1181, 71, 1197, 71, 71, 1183, 71, 1194,
1772
1773 71, 1186, 1187, 71, 71, 1195, 1192, 1189, 1196, 1188,
1774 71, 1198, 1190, 1199, 1193, 1191, 71, 71, 1200, 71,
1775 1201, 71, 71, 2985, 71, 1207, 1194, 1202, 1203, 1209,
1776 71, 1208, 1195, 1210, 71, 1196, 2985, 1204, 1198, 1205,
1777 1199, 71, 1206, 1211, 1213, 1200, 71, 1201, 1212, 71,
1778 71, 71, 1207, 71, 1202, 1203, 1209, 71, 1208, 1214,
1779 1210, 1216, 71, 1217, 1204, 1215, 1205, 71, 1218, 1206,
1780 1211, 1213, 1219, 71, 1220, 1212, 71, 1222, 1221, 71,
1781 1223, 71, 2985, 71, 71, 1224, 1214, 2985, 1216, 1228,
1782 1217, 1225, 1215, 1231, 1226, 1218, 71, 71, 1227, 71,
1783
1784 71, 1220, 71, 1230, 1222, 1221, 71, 1223, 71, 71,
1785 71, 1229, 1224, 71, 1232, 71, 1228, 1234, 1225, 1233,
1786 1231, 1226, 1235, 71, 1236, 1227, 71, 71, 1237, 71,
1787 1230, 71, 1238, 1241, 1240, 1239, 1244, 1242, 1229, 71,
1788 71, 1232, 71, 71, 1234, 71, 1233, 1243, 1245, 1235,
1789 71, 1236, 71, 1246, 1261, 1237, 1252, 1315, 1250, 1238,
1790 1265, 1240, 1239, 1244, 1242, 71, 71, 1247, 71, 1249,
1791 71, 71, 1248, 1251, 1243, 1245, 1259, 71, 1280, 1260,
1792 1246, 1262, 71, 1252, 71, 1250, 71, 71, 2985, 1263,
1793 71, 1266, 71, 2985, 1264, 1267, 1249, 71, 1268, 71,
1794
1795 1251, 1253, 2985, 1259, 1254, 1255, 1260, 71, 1262, 1256,
1796 71, 71, 71, 71, 1269, 1257, 1263, 71, 1266, 1258,
1797 71, 1264, 1267, 71, 71, 1268, 1270, 1271, 1253, 1272,
1798 1273, 1254, 1255, 1277, 1274, 1278, 1256, 71, 1276, 1281,
1799 1275, 1269, 1257, 71, 2985, 71, 1258, 1282, 71, 1283,
1800 1279, 71, 71, 1270, 1271, 71, 1272, 1273, 71, 71,
1801 1277, 1274, 1278, 2985, 1289, 1276, 1291, 1275, 1293, 71,
1802 1294, 71, 71, 2985, 1282, 1292, 1283, 1279, 1284, 71,
1803 71, 1295, 71, 1285, 2985, 1286, 1305, 1287, 2985, 1288,
1804 71, 1289, 2985, 1291, 1300, 1293, 71, 1294, 71, 71,
1805
1806 1299, 1296, 1292, 2985, 1298, 1284, 1297, 71, 1295, 71,
1807 1285, 1301, 1286, 1304, 1287, 1302, 1288, 1303, 71, 1306,
1808 1307, 1300, 71, 71, 1308, 71, 71, 1299, 1309, 71,
1809 1310, 1298, 1312, 71, 1311, 1317, 1314, 71, 1301, 71,
1810 1304, 71, 1302, 71, 1303, 71, 1306, 1307, 1316, 1318,
1811 71, 1308, 71, 1319, 1313, 1309, 71, 1310, 71, 1312,
1812 71, 1311, 71, 1314, 1320, 1321, 1322, 1323, 1325, 2985,
1813 1326, 1324, 1330, 71, 71, 1316, 1318, 71, 71, 1327,
1814 1319, 1313, 1328, 1329, 71, 2985, 71, 1332, 71, 71,
1815 1335, 1320, 1321, 1322, 71, 71, 71, 1326, 1324, 71,
1816
1817 1331, 71, 1334, 1336, 1337, 1333, 1327, 71, 71, 1328,
1818 1329, 71, 71, 71, 1332, 1338, 1340, 1335, 1341, 2985,
1819 2985, 1339, 1342, 1348, 71, 1343, 1347, 1331, 71, 1334,
1820 1336, 1337, 1333, 71, 1344, 71, 1345, 1346, 71, 71,
1821 71, 71, 1338, 1340, 71, 1341, 1349, 71, 1339, 1342,
1822 1348, 1350, 1343, 1347, 1351, 1352, 71, 1353, 1354, 71,
1823 1362, 1344, 71, 1345, 1346, 71, 71, 1355, 1356, 1358,
1824 1359, 1361, 1357, 1349, 1360, 71, 71, 71, 1350, 71,
1825 1363, 71, 1364, 1365, 1353, 71, 71, 71, 71, 1370,
1826 71, 1372, 71, 1369, 1355, 1356, 71, 1359, 1361, 1357,
1827
1828 1366, 1360, 71, 71, 1368, 1371, 1367, 2985, 71, 1364,
1829 1377, 71, 71, 71, 71, 71, 1370, 71, 1372, 1373,
1830 1369, 1374, 1376, 71, 1378, 1375, 71, 1366, 71, 1383,
1831 2985, 1368, 1371, 1367, 71, 1379, 1381, 71, 71, 1380,
1832 1384, 1382, 1385, 1387, 71, 2985, 1373, 71, 1374, 1376,
1833 1386, 1378, 1375, 1392, 1394, 71, 1383, 71, 71, 2985,
1834 1393, 71, 1379, 71, 2985, 1395, 1380, 1384, 71, 1385,
1835 1387, 1388, 1390, 71, 1389, 1391, 1397, 1386, 71, 1396,
1836 1392, 1398, 71, 71, 71, 1400, 71, 1393, 71, 1402,
1837 1403, 1399, 1395, 1411, 71, 71, 1401, 71, 1388, 1390,
1838
1839 71, 1389, 1391, 1397, 1405, 71, 1396, 71, 1398, 1404,
1840 1406, 71, 1400, 71, 1407, 1408, 1402, 1403, 1399, 71,
1841 1409, 2985, 71, 1401, 1410, 71, 1413, 1415, 1412, 71,
1842 2985, 1405, 71, 1414, 71, 2985, 1404, 1406, 71, 71,
1843 71, 1407, 1408, 71, 1416, 1418, 71, 1409, 1419, 1417,
1844 1421, 1410, 1420, 1413, 1415, 1412, 71, 71, 1423, 71,
1845 1414, 1424, 1422, 1426, 1428, 1425, 1429, 71, 71, 71,
1846 1432, 1416, 1418, 71, 71, 1419, 1417, 1421, 1427, 1420,
1847 71, 1430, 2985, 1431, 71, 1423, 71, 2985, 1424, 1422,
1848 1426, 1433, 1425, 1434, 1435, 1438, 71, 71, 71, 1436,
1849
1850 71, 1437, 1442, 71, 1439, 1427, 1441, 71, 1430, 71,
1851 1431, 71, 71, 71, 71, 71, 1440, 2985, 1433, 1443,
1852 1434, 1435, 1438, 71, 71, 71, 1436, 1444, 1437, 1442,
1853 71, 1439, 71, 1441, 1445, 71, 1447, 1449, 1453, 1446,
1854 1451, 1448, 1452, 1440, 71, 1450, 1443, 1455, 71, 1457,
1855 71, 1454, 1456, 1458, 1444, 71, 71, 1461, 71, 71,
1856 1459, 1460, 71, 1463, 1449, 1453, 71, 1451, 71, 1452,
1857 2985, 71, 1450, 71, 1455, 1462, 1457, 1464, 1454, 1456,
1858 1472, 2985, 71, 71, 71, 71, 1465, 1459, 1460, 71,
1859 1463, 1466, 1467, 1468, 71, 1469, 1474, 1470, 1471, 71,
1860
1861 71, 71, 1462, 71, 1473, 1475, 71, 1472, 71, 71,
1862 71, 71, 1476, 1465, 1477, 1478, 1480, 1479, 1466, 1467,
1863 1468, 1485, 1469, 1474, 1470, 1471, 1490, 1484, 71, 71,
1864 71, 1473, 71, 71, 71, 71, 1481, 71, 1486, 1476,
1865 1482, 1477, 1478, 1480, 1479, 71, 1487, 1488, 1485, 71,
1866 1489, 2985, 1491, 1483, 1484, 1492, 1493, 71, 71, 1496,
1867 1499, 71, 1494, 1481, 71, 1486, 71, 1482, 1495, 71,
1868 1500, 2985, 71, 1487, 71, 1497, 1503, 1489, 71, 1491,
1869 1483, 1498, 1492, 1493, 71, 71, 1496, 1501, 71, 1494,
1870 1504, 71, 71, 1502, 1505, 1495, 71, 71, 71, 71,
1871
1872 1506, 1507, 1497, 1503, 1509, 1508, 1512, 71, 1498, 2985,
1873 1510, 1511, 1513, 1516, 1501, 1515, 71, 1504, 1514, 71,
1874 1502, 71, 71, 2985, 1519, 71, 71, 1506, 71, 71,
1875 71, 71, 1508, 1512, 1520, 1530, 71, 1510, 1511, 1513,
1876 1516, 71, 1515, 1517, 1518, 1514, 71, 71, 1521, 71,
1877 1522, 1519, 71, 1523, 1524, 1526, 71, 1525, 1527, 71,
1878 1529, 1520, 71, 2985, 1528, 71, 1531, 71, 71, 1532,
1879 1517, 1518, 71, 1533, 71, 1521, 71, 1522, 1535, 1536,
1880 1523, 1524, 1526, 71, 1525, 1527, 71, 1529, 1538, 71,
1881 1534, 1528, 1539, 1531, 71, 71, 1532, 2985, 1540, 71,
1882
1883 1533, 1537, 71, 1541, 1547, 1535, 1536, 71, 1544, 71,
1884 71, 1546, 1542, 1543, 1550, 1538, 71, 1534, 2985, 71,
1885 71, 71, 1545, 1551, 71, 1540, 71, 1548, 1537, 1549,
1886 1541, 1547, 71, 1553, 71, 1544, 71, 71, 1546, 1542,
1887 1543, 1550, 1554, 1555, 1552, 71, 1556, 1557, 2985, 1545,
1888 1551, 71, 2985, 71, 1548, 1558, 1549, 1559, 71, 1560,
1889 1553, 1564, 1561, 1562, 71, 1565, 2985, 71, 71, 1554,
1890 1570, 1552, 1567, 1556, 1563, 71, 1569, 71, 2985, 71,
1891 1566, 71, 1558, 71, 71, 71, 1560, 71, 1564, 1561,
1892 1562, 71, 1565, 71, 1568, 1571, 71, 1570, 1572, 1567,
1893
1894 71, 1563, 1576, 1569, 1577, 71, 71, 1566, 1573, 1578,
1895 71, 1574, 1580, 1582, 71, 1579, 1581, 1586, 2985, 1583,
1896 2985, 1568, 1571, 1575, 2985, 1572, 71, 71, 1584, 2985,
1897 1585, 1577, 71, 1588, 71, 1573, 1578, 71, 1574, 1580,
1898 71, 71, 1579, 1581, 1587, 71, 1583, 71, 1592, 71,
1899 1575, 1590, 1589, 1599, 71, 1584, 71, 1585, 1591, 71,
1900 1588, 71, 1593, 1594, 1595, 71, 71, 1596, 2985, 1597,
1901 1598, 1587, 71, 71, 1601, 1592, 1600, 1602, 1590, 1589,
1902 71, 1603, 1613, 71, 71, 1591, 71, 1604, 71, 1605,
1903 1606, 1595, 71, 1607, 71, 71, 1597, 1598, 71, 71,
1904
1905 71, 1601, 71, 1600, 1602, 71, 1608, 71, 1603, 71,
1906 1611, 2985, 1609, 1615, 1604, 1610, 1605, 1606, 1612, 71,
1907 1607, 1614, 71, 71, 71, 1616, 1621, 1620, 71, 1617,
1908 1618, 1619, 2985, 2985, 71, 71, 71, 1611, 71, 1609,
1909 1615, 71, 1610, 71, 71, 1612, 1623, 1622, 1614, 2985,
1910 1626, 71, 1616, 1621, 1620, 1630, 1617, 1618, 1619, 71,
1911 1624, 71, 1631, 1625, 1627, 1629, 71, 71, 1632, 1628,
1912 1633, 1634, 2985, 1623, 1622, 1635, 71, 1626, 71, 71,
1913 71, 1636, 1630, 1639, 1640, 71, 1637, 1624, 2985, 71,
1914 1625, 1627, 1629, 1638, 1648, 71, 1628, 1633, 1634, 71,
1915
1916 71, 71, 1635, 1642, 1641, 71, 71, 1643, 71, 1644,
1917 1639, 1640, 71, 1637, 71, 1645, 1649, 71, 1646, 1647,
1918 1638, 1650, 1653, 1652, 1651, 71, 71, 2985, 71, 1654,
1919 1642, 1641, 71, 71, 1643, 71, 1644, 71, 71, 1655,
1920 71, 1658, 1645, 71, 1660, 1646, 1647, 1659, 1650, 1653,
1921 1652, 1651, 1657, 1656, 71, 71, 1654, 1664, 71, 1661,
1922 1665, 71, 71, 1662, 1666, 2985, 1655, 71, 1658, 1668,
1923 1667, 1660, 1671, 71, 1659, 71, 71, 1663, 71, 1657,
1924 1656, 71, 1672, 1669, 1664, 71, 1661, 1665, 1670, 71,
1925 1662, 1666, 1674, 1673, 71, 1675, 1668, 1667, 71, 1671,
1926
1927 1678, 1676, 1677, 1679, 1663, 1680, 2985, 1689, 1683, 1672,
1928 71, 1682, 1681, 1684, 71, 71, 1686, 1685, 71, 1674,
1929 1673, 71, 1687, 1688, 2985, 71, 71, 71, 1676, 71,
1930 1679, 71, 71, 71, 1689, 1683, 1711, 71, 1682, 1681,
1931 71, 1692, 1690, 1686, 1685, 71, 1691, 1693, 1694, 1687,
1932 71, 1696, 1695, 1700, 71, 71, 1698, 1697, 1701, 2985,
1933 71, 1707, 71, 71, 71, 71, 71, 1702, 1692, 1690,
1934 71, 1708, 1706, 1691, 1693, 1694, 71, 1699, 1696, 1695,
1935 1703, 71, 1704, 71, 1697, 71, 71, 71, 1705, 1709,
1936 71, 71, 1710, 71, 1702, 1712, 71, 1713, 1708, 1706,
1937
1938 71, 71, 71, 1714, 1699, 1715, 1716, 1703, 1717, 1704,
1939 1718, 1719, 1720, 1721, 71, 1705, 1709, 2985, 1724, 1710,
1940 71, 71, 1712, 71, 1713, 71, 71, 71, 71, 1722,
1941 1714, 1726, 1715, 1716, 1723, 1717, 1725, 1718, 1719, 71,
1942 1721, 1730, 71, 1731, 71, 71, 1729, 1727, 71, 71,
1943 1728, 71, 1732, 1735, 71, 1733, 1722, 1734, 1726, 1736,
1944 1737, 1723, 71, 1725, 71, 71, 1738, 71, 1730, 1740,
1945 1741, 1739, 1744, 1729, 1727, 71, 1742, 1728, 71, 1732,
1946 71, 1743, 1733, 71, 1734, 1745, 1736, 71, 71, 71,
1947 1746, 71, 71, 1738, 1749, 71, 71, 71, 1739, 1744,
1948
1949 1747, 71, 1748, 1742, 1750, 1751, 71, 1752, 1743, 71,
1950 1754, 71, 1745, 1753, 1757, 1758, 71, 1746, 1756, 71,
1951 71, 1749, 71, 1755, 1759, 71, 71, 1747, 71, 1748,
1952 1760, 1750, 1751, 1762, 1752, 71, 71, 1754, 1761, 1764,
1953 1753, 1757, 71, 1767, 71, 1756, 71, 1763, 1768, 1765,
1954 1755, 1766, 1769, 1771, 71, 1772, 71, 1760, 1775, 1777,
1955 1762, 1770, 71, 1776, 71, 1761, 1764, 1773, 71, 71,
1956 1767, 1774, 1778, 71, 1763, 71, 1765, 71, 1766, 71,
1957 71, 71, 1772, 1779, 1780, 71, 71, 1781, 1770, 1783,
1958 1776, 71, 1786, 71, 1773, 1782, 71, 71, 1774, 1778,
1959
1960 1784, 2985, 1785, 1787, 1788, 1789, 1793, 1791, 1801, 2985,
1961 1790, 1780, 1795, 71, 71, 71, 1783, 1796, 71, 71,
1962 1798, 2985, 1782, 1797, 71, 1799, 1792, 71, 71, 1785,
1963 1787, 1788, 1789, 71, 1791, 1794, 71, 1790, 71, 1800,
1964 71, 71, 71, 1802, 71, 71, 1805, 1798, 1803, 1811,
1965 1797, 71, 1799, 1792, 1804, 71, 1806, 71, 1807, 1813,
1966 71, 71, 1794, 1809, 1808, 1812, 1800, 1810, 71, 1815,
1967 1802, 71, 71, 71, 1818, 1803, 71, 1814, 1819, 71,
1968 1816, 1804, 1817, 1806, 71, 1807, 71, 71, 71, 1820,
1969 1809, 1808, 1812, 71, 1810, 71, 1815, 1822, 71, 1821,
1970
1971 1823, 1824, 71, 1825, 1814, 71, 71, 1816, 1827, 1817,
1972 1828, 71, 1826, 71, 1829, 1830, 1820, 71, 71, 71,
1973 1831, 1832, 71, 1833, 1822, 1834, 1821, 1823, 1824, 71,
1974 1825, 1836, 71, 1838, 1835, 1827, 1837, 1828, 1840, 1826,
1975 71, 71, 1830, 71, 1839, 1841, 71, 1831, 1843, 71,
1976 1842, 71, 71, 71, 71, 71, 71, 1844, 1836, 71,
1977 1838, 1835, 71, 1837, 1846, 1840, 1845, 1847, 1852, 1854,
1978 1851, 1839, 1841, 71, 71, 1843, 71, 1842, 1849, 1850,
1979 1853, 71, 2985, 1848, 71, 71, 1856, 1859, 71, 71,
1980 71, 1846, 71, 1845, 1847, 71, 1854, 1851, 1857, 1858,
1981
1982 1855, 1860, 1863, 1865, 2985, 1849, 1850, 1853, 71, 71,
1983 1848, 1867, 1864, 1856, 71, 1861, 71, 71, 71, 71,
1984 1862, 1870, 1872, 1871, 71, 1857, 1858, 1855, 1860, 71,
1985 1865, 71, 1866, 71, 1868, 71, 1869, 1873, 1867, 1864,
1986 71, 71, 1861, 71, 71, 1874, 1875, 1862, 1876, 1872,
1987 1871, 1877, 1880, 71, 1881, 1879, 1878, 1884, 1885, 1866,
1988 1882, 1868, 71, 1869, 71, 1883, 71, 71, 1889, 71,
1989 1888, 71, 1874, 1875, 1887, 1876, 1886, 71, 1877, 71,
1990 1890, 71, 1879, 1878, 1892, 71, 1891, 1894, 1896, 71,
1991 71, 1893, 71, 71, 1906, 71, 71, 1888, 1901, 71,
1992
1993 71, 1887, 1897, 1886, 1899, 1895, 1898, 1890, 1900, 71,
1994 71, 1892, 71, 1891, 1902, 1903, 1904, 71, 1893, 71,
1995 71, 71, 71, 1907, 1908, 1901, 71, 1905, 1909, 1897,
1996 71, 1899, 1895, 1898, 71, 1900, 1911, 1912, 1910, 1918,
1997 71, 1902, 71, 71, 71, 1913, 71, 1914, 1917, 71,
1998 1907, 1908, 1915, 1916, 1905, 1909, 71, 2985, 71, 1919,
1999 71, 71, 1920, 1911, 1912, 1910, 71, 71, 71, 1921,
2000 71, 1922, 1913, 71, 1914, 1917, 1923, 71, 1925, 1915,
2001 1916, 1924, 1926, 71, 71, 1928, 1919, 71, 1927, 1920,
2002 71, 71, 1929, 1930, 1941, 1933, 1921, 2985, 71, 71,
2003
2004 1934, 2985, 1931, 1923, 71, 1925, 71, 71, 1924, 1926,
2005 1935, 71, 1928, 1932, 1936, 1927, 1937, 1938, 71, 1940,
2006 1930, 71, 1933, 71, 71, 1939, 1942, 1934, 71, 1931,
2007 1945, 71, 71, 71, 1943, 1946, 71, 1935, 1944, 1947,
2008 1932, 1936, 71, 1937, 1938, 71, 1940, 71, 71, 71,
2009 71, 1949, 1939, 1942, 1948, 1950, 1951, 1945, 1955, 2985,
2010 1952, 1943, 1946, 1954, 71, 1944, 1953, 2985, 1957, 2985,
2011 71, 71, 1967, 1956, 71, 1961, 71, 71, 1949, 71,
2012 71, 1948, 1950, 71, 71, 1955, 71, 1952, 1958, 1959,
2013 1954, 71, 1960, 1953, 1962, 1957, 1963, 1966, 1965, 71,
2014
2015 1956, 1968, 1961, 71, 71, 71, 71, 71, 1970, 1964,
2016 71, 1969, 71, 1994, 1974, 1958, 1959, 71, 71, 1960,
2017 1971, 1962, 1972, 1963, 1966, 1965, 1973, 2985, 1968, 71,
2018 1976, 1975, 71, 1978, 1977, 1970, 1964, 1979, 1969, 71,
2019 71, 1974, 71, 1982, 1980, 71, 71, 1971, 71, 1972,
2020 1981, 71, 71, 1973, 71, 1983, 1984, 1976, 1975, 1985,
2021 1978, 1977, 71, 71, 1979, 71, 1986, 1988, 71, 1990,
2022 1982, 1980, 71, 1987, 71, 1991, 1989, 1981, 1992, 2985,
2023 1997, 71, 1983, 1984, 1995, 1993, 1985, 71, 2000, 71,
2024 1996, 71, 71, 71, 1988, 2004, 1990, 71, 2001, 71,
2025
2026 1987, 71, 1991, 1989, 71, 1992, 71, 1997, 1998, 1999,
2027 2005, 1995, 1993, 2003, 2002, 71, 71, 1996, 2006, 2009,
2028 71, 2011, 71, 2007, 71, 2001, 71, 71, 2012, 2010,
2029 2014, 2008, 71, 2013, 2985, 1998, 1999, 2005, 2018, 2985,
2030 2003, 2002, 71, 71, 71, 2006, 71, 71, 2011, 2022,
2031 2007, 71, 71, 2015, 71, 2012, 2010, 2014, 2008, 2023,
2032 2013, 2016, 71, 71, 2017, 2018, 2019, 71, 2020, 2024,
2033 2025, 2027, 71, 2021, 71, 2028, 2022, 2026, 2030, 71,
2034 2015, 2031, 71, 2029, 71, 71, 2023, 2985, 2016, 2050,
2035 71, 2017, 71, 2019, 2032, 2033, 2024, 2025, 2027, 71,
2036
2037 71, 71, 2028, 71, 2026, 71, 71, 2034, 2031, 2036,
2038 2029, 2035, 2037, 2039, 2041, 2040, 71, 2985, 2038, 2046,
2039 71, 2032, 2033, 71, 71, 71, 2044, 71, 2052, 2045,
2040 2042, 71, 71, 71, 2034, 71, 2036, 71, 2035, 2037,
2041 2039, 2041, 2040, 2043, 2049, 2038, 2046, 71, 2048, 2047,
2042 71, 71, 2053, 2044, 2051, 71, 2045, 2042, 71, 2054,
2043 71, 2055, 71, 2056, 2057, 2059, 2060, 2061, 2062, 2058,
2044 2043, 2049, 71, 2063, 2064, 2048, 2047, 71, 2065, 2053,
2045 71, 2051, 71, 71, 2068, 2069, 2054, 71, 2055, 2070,
2046 2056, 71, 2066, 2071, 2061, 2062, 71, 71, 71, 2073,
2047
2048 2063, 71, 71, 2067, 71, 2065, 2074, 2076, 71, 2072,
2049 2077, 2068, 71, 2075, 2078, 71, 2070, 2985, 71, 2066,
2050 2071, 2079, 2080, 2082, 2081, 71, 2985, 2089, 71, 71,
2051 2067, 71, 71, 2074, 71, 2083, 2072, 2077, 2084, 71,
2052 2075, 2085, 71, 2087, 71, 2086, 71, 71, 2079, 2080,
2053 2082, 2081, 71, 71, 71, 2088, 2090, 71, 2092, 2091,
2054 2093, 71, 2083, 2094, 2099, 2084, 71, 71, 2085, 2095,
2055 2087, 71, 2086, 2096, 2097, 2098, 2985, 71, 71, 71,
2056 71, 2985, 2088, 2090, 71, 2092, 2091, 2093, 71, 2100,
2057 2094, 71, 2110, 2985, 2985, 71, 2095, 2101, 2102, 2103,
2058
2059 2096, 2097, 2098, 71, 2104, 71, 71, 71, 71, 2105,
2060 2109, 2111, 2106, 2107, 2108, 2112, 2100, 71, 71, 71,
2061 71, 2113, 71, 2115, 2101, 2102, 2103, 2116, 71, 71,
2062 2114, 2104, 2117, 2118, 71, 71, 2105, 2109, 2111, 2106,
2063 2107, 2108, 2112, 2120, 71, 71, 2123, 2119, 2113, 71,
2064 2115, 2126, 2128, 2121, 71, 2124, 2122, 2114, 71, 71,
2065 2118, 71, 2125, 2129, 2130, 2127, 2132, 71, 2131, 71,
2066 2120, 71, 71, 71, 2119, 2134, 71, 71, 2126, 2128,
2067 2121, 2136, 2124, 2122, 71, 2133, 2135, 2137, 2138, 2125,
2068 71, 71, 2127, 71, 71, 2131, 2139, 2141, 71, 2140,
2069
2070 2143, 2144, 71, 71, 2146, 2152, 2149, 2147, 2136, 71,
2071 71, 2142, 2133, 2135, 71, 71, 71, 71, 2148, 71,
2072 2150, 2145, 71, 2139, 2141, 2154, 2140, 2143, 71, 71,
2073 71, 71, 71, 2149, 2147, 2151, 2153, 71, 2142, 71,
2074 2156, 2155, 2159, 2157, 71, 2148, 71, 2150, 2145, 71,
2075 71, 2158, 2154, 2160, 71, 71, 2161, 2162, 2165, 2163,
2076 2164, 2167, 2151, 2153, 2168, 71, 2166, 71, 2155, 2159,
2077 2157, 71, 71, 71, 2171, 71, 71, 71, 2158, 2172,
2078 2160, 71, 2173, 71, 2162, 71, 2163, 2164, 2167, 2169,
2079 2170, 2168, 2985, 2166, 2174, 2178, 2175, 2985, 71, 71,
2080
2081 71, 2171, 2179, 2180, 2182, 71, 2172, 2185, 71, 2173,
2082 71, 2176, 2181, 2177, 71, 2184, 2169, 2170, 71, 71,
2083 71, 2174, 2178, 2175, 71, 71, 2183, 2186, 2187, 2179,
2084 2180, 2182, 71, 2188, 2185, 2189, 2192, 71, 2176, 2181,
2085 2177, 2190, 2184, 2191, 2193, 71, 2194, 71, 71, 71,
2086 71, 2195, 2196, 2183, 2186, 2187, 2197, 2201, 71, 2198,
2087 2188, 2202, 2199, 2192, 2200, 71, 71, 71, 2190, 2203,
2088 71, 2193, 2204, 2194, 71, 71, 71, 71, 2195, 2196,
2089 71, 2205, 71, 2197, 2201, 2206, 2198, 2207, 71, 2199,
2090 2208, 2200, 2209, 71, 2213, 71, 2214, 2215, 2216, 2204,
2091
2092 2210, 71, 2211, 71, 2212, 71, 2985, 71, 2205, 71,
2093 71, 2218, 2206, 71, 2207, 2217, 2222, 2219, 71, 2209,
2094 2220, 2213, 71, 2214, 71, 2216, 71, 2210, 71, 2211,
2095 2221, 2212, 71, 71, 2223, 2225, 2226, 2228, 2218, 2224,
2096 71, 2227, 2217, 2222, 2219, 71, 71, 2220, 2229, 2230,
2097 71, 2231, 2232, 2233, 2985, 2235, 71, 2221, 2985, 2236,
2098 2234, 2223, 2225, 71, 71, 2237, 2224, 71, 2227, 2238,
2099 2240, 71, 71, 71, 71, 2229, 2230, 71, 71, 2239,
2100 71, 71, 2235, 71, 71, 2241, 2236, 2234, 2242, 2243,
2101 2244, 2245, 2237, 71, 2247, 2985, 2238, 2240, 71, 2246,
2102
2103 2248, 2249, 2253, 2250, 2256, 71, 2239, 2261, 71, 71,
2104 71, 71, 2241, 2251, 71, 71, 2243, 2244, 2245, 2252,
2105 71, 71, 71, 71, 2254, 71, 2246, 2248, 2249, 2253,
2106 2250, 71, 71, 2255, 2258, 2257, 71, 2259, 2262, 71,
2107 2251, 2260, 2263, 71, 2265, 2264, 2252, 2985, 71, 2266,
2108 2272, 2254, 2267, 71, 2268, 71, 71, 71, 71, 2269,
2109 2255, 2258, 2257, 71, 2259, 2262, 2270, 71, 2260, 2263,
2110 71, 2265, 2264, 71, 2271, 2273, 2266, 71, 2274, 2267,
2111 71, 2268, 71, 2275, 2276, 2277, 2269, 2278, 2282, 71,
2112 2279, 71, 71, 71, 2280, 2985, 71, 71, 71, 2283,
2113
2114 2281, 2271, 2273, 2284, 2285, 71, 2288, 2286, 2985, 71,
2115 2275, 2276, 2277, 2291, 2278, 71, 71, 2279, 71, 2287,
2116 2296, 2280, 71, 2290, 71, 2292, 71, 2281, 71, 2289,
2117 71, 2285, 2293, 2288, 2286, 71, 2294, 71, 71, 2295,
2118 71, 2297, 2300, 71, 2298, 71, 2287, 71, 2299, 71,
2119 2290, 71, 2292, 71, 2301, 2303, 2289, 2304, 2302, 2985,
2120 2985, 2305, 2308, 2294, 71, 2306, 2295, 71, 2297, 71,
2121 2307, 2298, 2309, 71, 71, 2299, 71, 71, 71, 71,
2122 2310, 2301, 2303, 71, 2304, 2302, 71, 71, 2305, 2308,
2123 2311, 2312, 2306, 2313, 71, 2314, 2315, 2307, 2316, 2309,
2124
2125 2317, 2321, 2318, 2985, 2319, 2985, 2320, 2310, 2323, 71,
2126 2324, 2322, 71, 71, 2325, 71, 71, 2311, 71, 2327,
2127 71, 71, 71, 71, 71, 2316, 71, 2317, 2321, 2318,
2128 71, 2319, 71, 2320, 2326, 2323, 2328, 2324, 2322, 2329,
2129 2331, 71, 71, 2330, 2332, 2333, 71, 2334, 2337, 2335,
2130 2336, 2985, 71, 2985, 2341, 71, 71, 71, 71, 71,
2131 71, 2326, 2338, 71, 2339, 71, 2329, 2331, 71, 71,
2132 2330, 2332, 2333, 2343, 2334, 71, 2335, 2336, 2340, 2342,
2133 71, 2341, 71, 2344, 2345, 71, 71, 2346, 2348, 2338,
2134 2349, 2339, 2347, 2985, 2350, 71, 2351, 71, 71, 71,
2135
2136 2343, 2355, 71, 2352, 71, 2340, 2342, 2353, 2985, 71,
2137 2344, 2345, 2356, 2354, 2346, 2348, 71, 2349, 2357, 2347,
2138 71, 2350, 2358, 2351, 2359, 2361, 2363, 2360, 71, 71,
2139 2352, 2985, 2365, 71, 2353, 71, 71, 71, 2362, 71,
2140 2354, 71, 2367, 2371, 71, 2357, 71, 2364, 71, 2358,
2141 71, 2359, 2361, 2363, 2360, 2366, 71, 2368, 2369, 2365,
2142 71, 2370, 71, 2372, 71, 2362, 2374, 71, 71, 2367,
2143 71, 2373, 2376, 2375, 2364, 2379, 2985, 2377, 2985, 2985,
2144 2385, 2387, 2366, 2378, 2368, 2369, 71, 71, 2370, 71,
2145 2372, 71, 71, 71, 2380, 71, 2381, 2383, 2373, 71,
2146
2147 2375, 2384, 2379, 2382, 2377, 71, 71, 71, 71, 71,
2148 2378, 2386, 71, 71, 2389, 2391, 2388, 2396, 2394, 2390,
2149 2398, 2380, 2392, 2381, 2383, 71, 71, 71, 2384, 71,
2150 2382, 2395, 2393, 2985, 2985, 2397, 2400, 71, 71, 71,
2151 71, 2389, 2391, 2388, 71, 2394, 2390, 71, 2403, 2392,
2152 2404, 2402, 2409, 2399, 71, 71, 71, 2401, 2395, 2393,
2153 71, 71, 2397, 2400, 2405, 71, 71, 2407, 2406, 2408,
2154 2410, 71, 71, 2412, 71, 2403, 71, 2404, 2402, 71,
2155 2399, 2411, 71, 2413, 2401, 2416, 2414, 2417, 2415, 2420,
2156 71, 2405, 2418, 71, 2407, 2406, 2408, 2410, 71, 71,
2157
2158 71, 71, 2419, 2421, 2422, 2423, 71, 2424, 2411, 71,
2159 2413, 71, 71, 2414, 2417, 2415, 71, 2425, 71, 2418,
2160 2426, 2427, 71, 2428, 2429, 71, 2431, 2430, 71, 2419,
2161 2421, 2422, 2423, 2432, 71, 71, 2434, 2985, 2435, 2437,
2162 2433, 71, 71, 71, 2425, 71, 2438, 71, 2427, 2439,
2163 2428, 2429, 71, 71, 2430, 2436, 2440, 71, 2441, 71,
2164 2432, 2444, 2442, 71, 71, 2435, 2437, 2433, 71, 71,
2165 2443, 2445, 2446, 2438, 71, 2449, 71, 2448, 2447, 2451,
2166 2454, 2985, 2436, 2440, 71, 71, 71, 2452, 2444, 2442,
2167 2455, 71, 71, 71, 71, 71, 2450, 2443, 2445, 2446,
2168
2169 2453, 71, 2449, 2460, 2448, 2447, 2451, 71, 71, 71,
2170 2456, 2457, 71, 2458, 2452, 2459, 2463, 71, 2462, 2461,
2171 2985, 2465, 71, 2450, 71, 2464, 2466, 2453, 71, 2468,
2172 71, 2469, 2472, 71, 2470, 71, 2467, 2456, 2457, 2471,
2173 2458, 71, 2459, 2463, 71, 2462, 2461, 71, 71, 2473,
2174 71, 2474, 2464, 71, 71, 71, 71, 2475, 2469, 2472,
2175 2476, 2477, 2478, 2467, 2985, 2985, 71, 2479, 2480, 2482,
2176 2481, 71, 2985, 2985, 71, 2483, 2473, 2484, 2485, 71,
2177 71, 2486, 71, 71, 2475, 71, 71, 2476, 2477, 2478,
2178 71, 71, 71, 2489, 2479, 2480, 2482, 2481, 2487, 71,
2179
2180 71, 2488, 2483, 71, 2484, 2485, 2490, 71, 2486, 2491,
2181 2493, 71, 2492, 2496, 2494, 71, 2498, 2499, 71, 2495,
2182 2489, 71, 2500, 2497, 71, 2487, 2985, 71, 2488, 71,
2183 71, 71, 2505, 2490, 71, 71, 2491, 2493, 2504, 2492,
2184 71, 2494, 2502, 2498, 2499, 2501, 2495, 2507, 2503, 71,
2185 2497, 2510, 2508, 71, 71, 71, 2506, 2509, 71, 71,
2186 2514, 71, 2985, 2511, 2512, 2504, 2985, 2513, 2516, 2502,
2187 2515, 2519, 2501, 2518, 71, 2503, 2517, 2520, 71, 71,
2188 2521, 71, 71, 2506, 71, 71, 71, 2514, 71, 71,
2189 2511, 2512, 2522, 71, 2513, 2516, 2523, 2515, 71, 71,
2190
2191 2518, 2524, 2525, 2517, 71, 2526, 2527, 71, 2528, 71,
2192 2530, 2985, 2531, 2529, 2532, 71, 2533, 71, 71, 2522,
2193 2534, 71, 2535, 2523, 2537, 2536, 2538, 71, 71, 2525,
2194 2539, 71, 2526, 2527, 71, 2540, 71, 2530, 71, 2531,
2195 71, 71, 2541, 71, 71, 2542, 2543, 2534, 2545, 2535,
2196 2544, 2537, 2536, 71, 71, 2546, 71, 2539, 2547, 71,
2197 71, 71, 71, 2548, 2551, 2549, 2557, 2552, 71, 2541,
2198 2550, 2553, 71, 2543, 71, 2545, 2555, 2544, 71, 2554,
2199 2556, 2985, 71, 2558, 2560, 71, 71, 71, 2561, 71,
2200 2548, 2551, 2559, 2557, 2552, 2567, 2563, 71, 2553, 2562,
2201
2202 71, 71, 2566, 71, 71, 2570, 2554, 2556, 71, 2568,
2203 71, 2560, 71, 2576, 71, 2561, 71, 2564, 2565, 2559,
2204 71, 2569, 2567, 2563, 71, 2571, 2562, 71, 2572, 2566,
2205 2573, 2575, 71, 71, 71, 2574, 2568, 2577, 2581, 71,
2206 71, 2578, 2985, 2579, 2564, 2565, 2580, 71, 2569, 71,
2207 2583, 2985, 2571, 2582, 2586, 2572, 2585, 71, 2575, 2584,
2208 71, 71, 71, 71, 2577, 2581, 2588, 71, 2578, 71,
2209 2579, 2587, 71, 2580, 71, 71, 2589, 2583, 71, 2590,
2210 2582, 2586, 2591, 2585, 2592, 2593, 2584, 2595, 71, 2596,
2211 2597, 2594, 2598, 71, 2600, 2985, 2599, 2601, 2587, 2985,
2212
2213 71, 2985, 2609, 2589, 71, 71, 2590, 71, 71, 71,
2214 71, 2592, 71, 71, 71, 2602, 2596, 2597, 2594, 2598,
2215 71, 71, 2603, 2599, 2601, 2604, 2606, 2607, 2608, 71,
2216 2605, 2610, 2613, 71, 71, 2611, 2612, 2615, 71, 2985,
2217 71, 71, 2602, 2614, 2616, 71, 71, 2617, 71, 2603,
2218 71, 2619, 71, 2606, 2607, 2608, 2636, 71, 71, 2613,
2219 2618, 71, 2611, 2612, 2615, 71, 2620, 71, 2622, 2621,
2220 2614, 2616, 2623, 2625, 2617, 71, 2624, 2629, 2630, 2626,
2221 2631, 71, 2627, 71, 2985, 2628, 2985, 2618, 71, 2634,
2222 71, 71, 2632, 2620, 71, 2622, 2621, 71, 2635, 2623,
2223
2224 2625, 71, 71, 2624, 71, 71, 2626, 71, 71, 2627,
2225 71, 2633, 2628, 2637, 2638, 2639, 2634, 2640, 71, 2632,
2226 71, 2641, 2643, 2642, 2644, 2635, 71, 71, 2645, 2985,
2227 71, 71, 2646, 2650, 2648, 71, 71, 2985, 2633, 2647,
2228 2637, 2638, 71, 2651, 2640, 71, 71, 71, 2641, 2643,
2229 2642, 2649, 2653, 2652, 2654, 2645, 71, 71, 71, 71,
2230 71, 2648, 2655, 2656, 2657, 2658, 2647, 71, 2659, 71,
2231 2651, 71, 71, 71, 2660, 71, 2661, 2662, 2649, 2653,
2232 2652, 2654, 2663, 71, 71, 2665, 2666, 71, 2664, 2655,
2233 2656, 2657, 2658, 2985, 71, 2659, 2667, 71, 2669, 2668,
2234
2235 2670, 71, 2672, 2661, 71, 2674, 71, 71, 2673, 71,
2236 71, 2671, 71, 2666, 2676, 2664, 71, 2675, 71, 2678,
2237 71, 2677, 2681, 2667, 2985, 2669, 2668, 71, 71, 2672,
2238 71, 71, 2674, 2679, 2680, 2673, 2682, 2684, 2671, 71,
2239 2683, 71, 2686, 2689, 2675, 2688, 2690, 71, 2677, 71,
2240 2687, 71, 71, 2693, 71, 71, 2685, 2694, 71, 2691,
2241 2679, 2680, 2695, 71, 71, 2699, 2700, 2683, 71, 2686,
2242 2696, 2692, 2688, 2690, 71, 71, 2698, 2687, 71, 2701,
2243 71, 71, 2702, 2685, 2694, 71, 2691, 2697, 71, 2695,
2244 71, 71, 71, 2700, 71, 2703, 2704, 2696, 2692, 2705,
2245
2246 2706, 2709, 2707, 2708, 2710, 2985, 2712, 71, 71, 2702,
2247 2713, 71, 71, 2711, 2697, 2714, 2715, 71, 71, 2717,
2248 2985, 71, 2703, 2704, 71, 2718, 2705, 2719, 71, 2707,
2249 2708, 71, 71, 2712, 2716, 2720, 2721, 71, 71, 2722,
2250 2711, 71, 71, 2715, 2724, 2723, 2717, 71, 2727, 71,
2251 2725, 2726, 71, 71, 71, 71, 71, 2728, 71, 2732,
2252 2729, 2716, 71, 2721, 2731, 2733, 71, 2736, 2737, 2730,
2253 2985, 2724, 2723, 71, 71, 2727, 71, 2725, 2726, 2738,
2254 2739, 2734, 71, 2741, 71, 2735, 71, 2729, 71, 71,
2255 2740, 2731, 2743, 71, 2736, 71, 2730, 71, 2742, 2744,
2256
2257 2745, 2748, 71, 71, 2985, 2749, 71, 2739, 2734, 2746,
2258 2750, 71, 2735, 71, 2747, 71, 71, 2740, 2756, 2743,
2259 71, 71, 71, 71, 2751, 2742, 71, 2745, 2748, 71,
2260 2752, 71, 2749, 2753, 2763, 2754, 2746, 2750, 71, 2755,
2261 71, 2747, 71, 71, 2759, 2756, 2757, 2758, 71, 2762,
2262 71, 2751, 2761, 2760, 2764, 2765, 71, 2752, 2766, 71,
2263 2753, 71, 2754, 71, 2767, 2774, 2755, 2768, 2769, 2770,
2264 2771, 2759, 2775, 2757, 2758, 71, 2762, 2776, 71, 2761,
2265 2760, 71, 2765, 2772, 2773, 71, 71, 2777, 71, 2780,
2266 2778, 71, 2774, 2781, 2779, 2783, 71, 71, 71, 71,
2267
2268 71, 71, 2784, 2782, 2776, 71, 2785, 2786, 2788, 2787,
2269 2790, 71, 71, 2789, 2777, 71, 2780, 2778, 71, 71,
2270 71, 2779, 2783, 2791, 71, 71, 71, 2793, 2798, 2784,
2271 2782, 2792, 2985, 2785, 2786, 2788, 2787, 71, 2794, 71,
2272 2789, 2795, 2796, 71, 2799, 2800, 71, 2797, 2802, 71,
2273 71, 2803, 2805, 2801, 2793, 2804, 71, 71, 2792, 71,
2274 71, 2806, 2807, 71, 2808, 2794, 2809, 2810, 2795, 2811,
2275 71, 2799, 2800, 71, 71, 2802, 2812, 2813, 2803, 71,
2276 2801, 2814, 2804, 71, 2815, 2816, 2818, 2817, 2806, 71,
2277 2819, 71, 2820, 71, 71, 2821, 71, 71, 2822, 2827,
2278
2279 71, 71, 71, 71, 71, 71, 2823, 2829, 71, 2824,
2280 71, 2815, 71, 2818, 2817, 2825, 2826, 2819, 2828, 2820,
2281 71, 2831, 71, 2832, 71, 2822, 71, 71, 71, 2830,
2282 71, 71, 71, 2823, 2829, 2833, 2824, 2834, 2835, 2836,
2283 2838, 71, 2825, 2826, 2837, 2828, 2839, 71, 2831, 71,
2284 2832, 71, 71, 2841, 2842, 2843, 2830, 71, 2840, 71,
2285 2844, 71, 2833, 2845, 2881, 2835, 2836, 2838, 71, 71,
2286 71, 2837, 2846, 2839, 2847, 2848, 71, 71, 2850, 2849,
2287 2841, 2842, 71, 2854, 2851, 2840, 71, 71, 71, 2985,
2288 71, 71, 71, 2852, 2853, 2855, 71, 2856, 71, 2846,
2289
2290 2857, 2847, 2848, 2985, 2858, 2850, 2849, 71, 71, 71,
2291 2854, 2851, 71, 2861, 71, 71, 71, 2859, 2860, 2865,
2292 2852, 2853, 2855, 71, 2856, 2862, 71, 2857, 2863, 71,
2293 2866, 2858, 2864, 2868, 71, 2867, 2869, 71, 2870, 71,
2294 2861, 71, 71, 71, 2859, 2860, 2865, 2871, 2872, 2873,
2295 2874, 2879, 2862, 71, 71, 2863, 2876, 2866, 71, 2864,
2296 71, 2875, 2867, 2869, 2877, 71, 2882, 2878, 71, 2880,
2297 2884, 2887, 2885, 71, 2871, 71, 71, 2874, 2879, 71,
2298 71, 71, 2886, 2876, 71, 2883, 71, 2890, 2875, 71,
2299 71, 2877, 71, 2882, 2878, 2888, 2880, 71, 71, 2885,
2300
2301 2891, 2889, 2892, 2893, 2894, 2895, 2896, 71, 2898, 2886,
2302 71, 71, 2883, 2899, 71, 2903, 71, 2897, 2900, 71,
2303 2985, 71, 2888, 2917, 71, 2901, 71, 2891, 2889, 2892,
2304 2893, 71, 71, 2896, 2902, 2898, 71, 71, 71, 2904,
2305 71, 2905, 2903, 2906, 2897, 2900, 71, 71, 2907, 2909,
2306 2908, 71, 2901, 2985, 2915, 71, 2910, 71, 2911, 2985,
2307 2912, 2902, 71, 71, 71, 2913, 2904, 71, 2905, 2916,
2308 2906, 2914, 2985, 2918, 71, 2907, 2909, 2908, 71, 71,
2309 71, 71, 2919, 2910, 2920, 2911, 2921, 2912, 2923, 2922,
2310 2924, 71, 2913, 2985, 2926, 2927, 2916, 71, 2914, 71,
2311
2312 2918, 2925, 2928, 2932, 71, 2929, 71, 2930, 71, 2919,
2313 71, 2920, 2934, 2921, 2935, 71, 2922, 71, 71, 2931,
2314 71, 71, 2927, 71, 2936, 71, 71, 71, 2925, 2928,
2315 2933, 2939, 2929, 2985, 2930, 71, 2940, 2944, 71, 2934,
2316 71, 2935, 2937, 2985, 71, 2938, 2931, 2941, 2942, 2985,
2317 2943, 71, 2945, 71, 2947, 71, 2949, 2933, 2939, 71,
2318 71, 2950, 71, 2940, 2944, 2948, 71, 2946, 71, 2937,
2319 2952, 2951, 2938, 71, 2941, 2942, 71, 2943, 2953, 2945,
2320 71, 2947, 71, 2949, 2954, 2955, 71, 71, 2950, 2956,
2321 71, 2957, 2948, 71, 2946, 2958, 2960, 2952, 2951, 2959,
2322
2323 2962, 2963, 2961, 2965, 71, 2953, 2970, 71, 71, 2964,
2324 2966, 71, 2955, 2967, 71, 71, 2956, 71, 71, 71,
2325 2969, 71, 2958, 2960, 71, 71, 2959, 2962, 71, 2961,
2326 2965, 2968, 71, 71, 2971, 2972, 2964, 2966, 2973, 71,
2327 2967, 2974, 71, 71, 2976, 2977, 71, 2969, 2981, 2975,
2328 2978, 2979, 2980, 2983, 2984, 2982, 71, 2985, 2968, 2985,
2329 2985, 2971, 2972, 71, 71, 2973, 2985, 2985, 71, 71,
2330 71, 71, 71, 71, 71, 2981, 2975, 2978, 2979, 2980,
2331 71, 71, 2982, 43, 43, 43, 43, 43, 43, 43,
2332 48, 48, 48, 48, 48, 48, 48, 53, 53, 53,
2333
2334 53, 53, 53, 53, 59, 59, 59, 59, 59, 59,
2335 59, 64, 64, 64, 64, 64, 64, 64, 74, 74,
2336 2985, 74, 74, 74, 74, 141, 141, 2985, 2985, 2985,
2337 141, 141, 143, 143, 2985, 2985, 143, 2985, 143, 145,
2338 2985, 2985, 2985, 2985, 2985, 145, 148, 148, 2985, 2985,
2339 2985, 148, 148, 150, 2985, 2985, 2985, 2985, 2985, 150,
2340 152, 152, 2985, 152, 152, 152, 152, 75, 75, 2985,
2341 75, 75, 75, 75, 13, 2985, 2985, 2985, 2985, 2985,
2342 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
2343 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
2344
2345 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
2346 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
2347 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
2348 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
2349 2985
1461 18, 19, 20, 21, 22, 23, 22, 18, 18, 18,
1462 18, 18, 22, 24, 25, 26, 27, 28, 29, 18,
1463 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
1464 40, 41, 42, 43, 44, 18, 18, 18, 45, 46,
1465 24, 25, 26, 27, 28, 29, 18, 30, 31, 32,
1466 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
1467 43, 44, 18, 18, 18, 45, 48, 49, 50, 48,
1468 49, 50, 53, 54, 53, 54, 55, 118, 55, 58,
1469 59, 60, 61, 119, 22, 58, 59, 60, 61, 86,
1470 22, 64, 65, 66, 64, 65, 66, 87, 157, 157,
1471
1472 1219, 88, 85, 51, 118, 86, 51, 164, 164, 56,
1473 119, 56, 167, 75, 76, 77, 78, 62, 22, 75,
1474 76, 77, 78, 62, 22, 81, 82, 83, 67, 97,
1475 86, 67, 19, 20, 21, 69, 70, 71, 19, 20,
1476 21, 69, 70, 71, 81, 82, 83, 120, 108, 174,
1477 174, 79, 72, 156, 167, 86, 97, 79, 72, 86,
1478 134, 90, 84, 90, 90, 86, 90, 175, 109, 173,
1479 73, 86, 90, 86, 120, 108, 73, 172, 128, 72,
1480 156, 84, 157, 157, 86, 72, 112, 134, 110, 159,
1481 164, 164, 159, 170, 113, 109, 98, 399, 185, 91,
1482
1483 92, 93, 111, 99, 94, 128, 167, 100, 159, 95,
1484 101, 159, 86, 112, 86, 110, 86, 179, 96, 167,
1485 170, 113, 86, 98, 86, 185, 86, 92, 93, 111,
1486 99, 94, 86, 165, 100, 87, 95, 101, 85, 88,
1487 85, 85, 163, 85, 179, 96, 102, 162, 114, 85,
1488 103, 115, 186, 104, 178, 105, 106, 246, 116, 161,
1489 117, 161, 161, 286, 161, 86, 107, 90, 86, 90,
1490 90, 86, 90, 102, 86, 114, 121, 103, 115, 186,
1491 104, 178, 105, 106, 122, 116, 177, 117, 125, 86,
1492 123, 180, 126, 107, 124, 86, 153, 321, 86, 145,
1493
1494 154, 146, 86, 121, 155, 169, 176, 160, 127, 86,
1495 147, 122, 158, 177, 86, 125, 148, 123, 180, 126,
1496 86, 124, 86, 153, 149, 86, 145, 154, 146, 86,
1497 86, 155, 325, 176, 150, 127, 129, 147, 151, 152,
1498 130, 198, 175, 148, 174, 174, 131, 86, 86, 132,
1499 166, 149, 166, 166, 181, 166, 133, 171, 86, 171,
1500 171, 150, 171, 129, 86, 151, 152, 130, 198, 85,
1501 184, 85, 85, 131, 85, 194, 132, 173, 86, 86,
1502 85, 181, 182, 133, 135, 172, 167, 202, 136, 90,
1503 239, 90, 90, 195, 90, 183, 86, 184, 137, 138,
1504
1505 90, 139, 86, 190, 191, 165, 86, 86, 193, 182,
1506 86, 135, 86, 187, 202, 136, 86, 239, 192, 188,
1507 195, 189, 183, 86, 163, 137, 138, 91, 139, 140,
1508 190, 191, 141, 162, 86, 193, 196, 197, 203, 142,
1509 187, 1088, 206, 143, 144, 192, 188, 86, 189, 86,
1510 86, 86, 199, 200, 204, 86, 140, 160, 158, 141,
1511 201, 205, 211, 196, 197, 203, 142, 86, 86, 206,
1512 143, 144, 86, 207, 213, 3136, 208, 86, 221, 199,
1513 200, 204, 86, 86, 214, 222, 212, 201, 205, 209,
1514 210, 86, 3136, 3136, 86, 216, 3136, 86, 223, 217,
1515
1516 207, 213, 219, 208, 215, 221, 86, 220, 86, 224,
1517 86, 214, 222, 212, 226, 218, 209, 210, 86, 86,
1518 225, 229, 216, 86, 228, 223, 217, 234, 86, 219,
1519 227, 215, 233, 86, 220, 3136, 224, 86, 3136, 86,
1520 86, 226, 218, 230, 86, 231, 3136, 225, 229, 232,
1521 241, 228, 86, 86, 234, 235, 236, 227, 86, 233,
1522 240, 86, 86, 3136, 245, 237, 3136, 86, 255, 242,
1523 230, 238, 231, 247, 86, 261, 232, 241, 86, 86,
1524 243, 254, 235, 236, 244, 3136, 248, 240, 86, 86,
1525 251, 245, 237, 86, 253, 255, 242, 86, 238, 3136,
1526
1527 247, 252, 261, 249, 256, 86, 250, 243, 254, 260,
1528 86, 244, 86, 248, 257, 86, 263, 251, 264, 262,
1529 266, 253, 3136, 258, 86, 86, 267, 3136, 252, 265,
1530 249, 256, 3136, 250, 86, 259, 260, 3136, 3136, 86,
1531 86, 257, 86, 263, 167, 264, 262, 266, 86, 161,
1532 258, 161, 161, 267, 161, 166, 265, 166, 166, 268,
1533 166, 90, 259, 90, 90, 171, 90, 171, 171, 270,
1534 171, 271, 3136, 269, 272, 275, 274, 276, 86, 3136,
1535 281, 273, 279, 86, 278, 86, 282, 280, 283, 86,
1536 86, 86, 86, 86, 86, 277, 270, 284, 271, 169,
1537
1538 269, 272, 275, 274, 276, 86, 86, 86, 273, 279,
1539 285, 278, 86, 282, 280, 283, 295, 287, 3136, 86,
1540 296, 288, 277, 297, 284, 300, 301, 298, 3136, 299,
1541 302, 86, 304, 86, 307, 86, 86, 285, 289, 3136,
1542 86, 305, 86, 295, 3136, 86, 86, 296, 288, 86,
1543 297, 86, 300, 301, 298, 86, 299, 306, 303, 304,
1544 310, 307, 86, 86, 308, 289, 290, 309, 305, 86,
1545 86, 291, 3136, 311, 312, 318, 292, 3136, 3136, 86,
1546 322, 319, 293, 294, 306, 303, 327, 310, 86, 86,
1547 331, 308, 326, 290, 309, 86, 86, 86, 291, 86,
1548
1549 311, 312, 318, 292, 320, 335, 86, 322, 319, 293,
1550 294, 313, 323, 328, 314, 86, 315, 333, 86, 326,
1551 330, 334, 86, 324, 332, 86, 86, 329, 316, 3136,
1552 317, 320, 335, 338, 336, 337, 3136, 86, 313, 341,
1553 86, 314, 339, 315, 86, 86, 86, 330, 86, 86,
1554 324, 332, 3136, 86, 329, 316, 86, 317, 86, 340,
1555 338, 336, 337, 86, 86, 342, 341, 343, 345, 339,
1556 344, 346, 348, 3136, 347, 351, 352, 349, 350, 86,
1557 86, 86, 86, 354, 86, 353, 340, 357, 86, 86,
1558 86, 3136, 342, 363, 343, 345, 359, 344, 346, 86,
1559
1560 86, 347, 351, 352, 86, 350, 358, 355, 356, 3136,
1561 362, 360, 353, 86, 361, 86, 86, 364, 86, 86,
1562 365, 366, 86, 359, 367, 86, 3136, 368, 86, 369,
1563 86, 370, 373, 358, 355, 356, 86, 362, 360, 86,
1564 86, 361, 371, 374, 376, 377, 378, 365, 86, 86,
1565 384, 367, 381, 86, 368, 86, 369, 380, 86, 86,
1566 375, 167, 383, 382, 86, 372, 86, 86, 86, 379,
1567 374, 376, 377, 378, 86, 385, 86, 86, 386, 381,
1568 388, 387, 86, 389, 380, 86, 390, 375, 391, 383,
1569 382, 392, 372, 398, 395, 86, 379, 86, 393, 86,
1570
1571 86, 3136, 397, 86, 86, 386, 396, 86, 387, 394,
1572 389, 86, 86, 390, 400, 391, 401, 86, 392, 86,
1573 398, 402, 404, 86, 403, 393, 86, 86, 405, 397,
1574 86, 406, 407, 396, 86, 86, 394, 409, 408, 411,
1575 410, 400, 86, 401, 413, 412, 417, 86, 402, 404,
1576 86, 403, 86, 86, 86, 405, 86, 414, 406, 407,
1577 416, 418, 3136, 423, 422, 408, 3136, 410, 86, 86,
1578 86, 86, 412, 417, 415, 419, 86, 421, 86, 420,
1579 86, 424, 86, 86, 414, 425, 86, 416, 86, 86,
1580 423, 422, 426, 86, 86, 427, 3136, 429, 428, 433,
1581
1582 430, 415, 419, 86, 421, 86, 420, 86, 424, 86,
1583 434, 431, 425, 435, 86, 86, 436, 445, 443, 426,
1584 444, 3136, 427, 86, 429, 428, 433, 430, 432, 86,
1585 449, 86, 3136, 462, 450, 86, 86, 86, 431, 86,
1586 435, 468, 86, 436, 445, 443, 3136, 444, 86, 86,
1587 3136, 446, 491, 447, 86, 432, 437, 449, 451, 438,
1588 86, 450, 452, 453, 439, 440, 441, 442, 468, 448,
1589 459, 454, 3136, 86, 86, 86, 455, 456, 446, 86,
1590 447, 460, 86, 437, 461, 451, 438, 86, 463, 452,
1591 453, 439, 440, 441, 442, 457, 448, 459, 458, 86,
1592
1593 464, 86, 86, 86, 456, 86, 465, 466, 460, 467,
1594 86, 461, 469, 471, 477, 463, 470, 488, 86, 86,
1595 490, 472, 457, 473, 86, 458, 86, 464, 86, 86,
1596 475, 476, 474, 465, 466, 86, 467, 86, 478, 469,
1597 481, 483, 482, 470, 488, 86, 86, 86, 472, 479,
1598 473, 492, 86, 86, 86, 480, 504, 475, 476, 474,
1599 86, 484, 86, 489, 86, 478, 528, 481, 483, 482,
1600 520, 86, 3136, 86, 485, 521, 479, 486, 492, 487,
1601 505, 493, 480, 504, 506, 86, 503, 494, 484, 86,
1602 489, 495, 86, 86, 519, 555, 86, 507, 86, 496,
1603
1604 3136, 485, 86, 510, 486, 86, 487, 505, 493, 508,
1605 86, 506, 86, 503, 494, 3136, 86, 522, 495, 518,
1606 86, 519, 555, 525, 507, 509, 496, 497, 523, 498,
1607 510, 86, 524, 86, 167, 86, 508, 3136, 86, 526,
1608 86, 530, 499, 527, 522, 500, 518, 501, 86, 502,
1609 525, 86, 509, 86, 497, 523, 498, 86, 531, 524,
1610 3136, 529, 86, 3136, 532, 3136, 526, 3136, 530, 499,
1611 527, 86, 500, 533, 501, 3136, 502, 511, 512, 534,
1612 540, 538, 3136, 86, 541, 531, 535, 513, 529, 514,
1613 515, 516, 536, 86, 517, 537, 86, 539, 583, 86,
1614
1615 533, 545, 86, 86, 511, 512, 534, 86, 538, 86,
1616 86, 541, 86, 535, 513, 543, 514, 515, 516, 536,
1617 542, 517, 537, 544, 539, 86, 546, 86, 86, 547,
1618 86, 551, 548, 86, 549, 550, 86, 552, 86, 558,
1619 86, 553, 543, 563, 554, 3136, 559, 542, 86, 556,
1620 544, 561, 86, 546, 86, 86, 547, 86, 551, 548,
1621 606, 560, 86, 86, 552, 86, 558, 557, 553, 86,
1622 563, 554, 562, 559, 86, 564, 556, 86, 561, 566,
1623 86, 565, 567, 570, 574, 571, 86, 606, 560, 3136,
1624 86, 572, 86, 568, 557, 569, 576, 573, 575, 562,
1625
1626 86, 86, 564, 577, 86, 578, 566, 86, 565, 567,
1627 570, 579, 571, 581, 86, 86, 86, 86, 572, 586,
1628 568, 580, 569, 576, 573, 575, 86, 582, 86, 86,
1629 577, 584, 578, 86, 587, 585, 588, 3136, 579, 86,
1630 581, 86, 591, 589, 590, 86, 586, 597, 580, 86,
1631 86, 592, 595, 86, 582, 86, 86, 593, 584, 86,
1632 598, 596, 585, 588, 86, 594, 86, 86, 86, 591,
1633 589, 590, 599, 86, 597, 86, 601, 600, 592, 595,
1634 602, 3136, 3136, 86, 593, 605, 603, 598, 596, 604,
1635 3136, 86, 594, 607, 611, 86, 86, 3136, 609, 599,
1636
1637 86, 86, 617, 601, 600, 610, 86, 602, 86, 608,
1638 618, 86, 605, 603, 612, 86, 604, 86, 619, 86,
1639 607, 611, 613, 86, 614, 609, 615, 616, 86, 86,
1640 620, 86, 610, 86, 86, 621, 608, 618, 691, 622,
1641 86, 612, 623, 624, 626, 627, 625, 86, 86, 613,
1642 86, 614, 86, 615, 616, 629, 86, 620, 86, 86,
1643 630, 628, 621, 632, 633, 691, 622, 86, 86, 623,
1644 624, 626, 635, 625, 636, 634, 86, 86, 86, 86,
1645 86, 637, 629, 631, 638, 639, 86, 640, 628, 3136,
1646 632, 633, 86, 651, 652, 642, 86, 86, 86, 635,
1647
1648 86, 636, 634, 86, 653, 641, 86, 86, 637, 86,
1649 631, 638, 639, 86, 640, 654, 656, 655, 3136, 3136,
1650 651, 652, 642, 86, 3136, 3136, 667, 86, 86, 3136,
1651 3136, 653, 641, 643, 660, 659, 3136, 663, 644, 86,
1652 645, 657, 654, 656, 655, 658, 646, 86, 647, 676,
1653 86, 648, 649, 667, 3136, 86, 86, 86, 650, 86,
1654 643, 660, 659, 86, 663, 644, 661, 645, 657, 662,
1655 664, 666, 658, 646, 669, 647, 676, 86, 648, 649,
1656 665, 86, 86, 668, 674, 650, 670, 86, 671, 680,
1657 86, 672, 673, 661, 675, 677, 662, 86, 666, 86,
1658
1659 86, 669, 86, 678, 86, 679, 86, 665, 681, 683,
1660 668, 674, 86, 670, 684, 671, 680, 86, 672, 673,
1661 86, 675, 677, 86, 682, 86, 685, 86, 686, 689,
1662 678, 3136, 679, 695, 687, 681, 683, 167, 690, 688,
1663 692, 684, 86, 86, 694, 86, 86, 86, 693, 696,
1664 86, 682, 86, 697, 699, 686, 689, 698, 86, 3136,
1665 695, 687, 86, 86, 700, 690, 688, 692, 701, 86,
1666 702, 694, 86, 713, 704, 693, 86, 703, 705, 86,
1667 706, 714, 709, 86, 698, 86, 86, 707, 716, 86,
1668 708, 700, 86, 86, 710, 701, 86, 702, 86, 711,
1669
1670 86, 704, 86, 715, 703, 705, 712, 706, 86, 709,
1671 717, 718, 722, 719, 707, 86, 3136, 708, 720, 721,
1672 86, 724, 723, 725, 731, 86, 86, 726, 728, 86,
1673 727, 3136, 86, 712, 736, 86, 86, 86, 733, 722,
1674 730, 732, 86, 86, 86, 86, 721, 86, 724, 723,
1675 725, 86, 86, 729, 726, 728, 86, 727, 738, 734,
1676 737, 86, 735, 86, 86, 733, 86, 730, 732, 86,
1677 739, 86, 743, 746, 742, 740, 3136, 745, 748, 741,
1678 729, 86, 86, 86, 744, 738, 734, 737, 86, 735,
1679 747, 86, 750, 86, 86, 86, 749, 739, 86, 743,
1680
1681 746, 742, 740, 751, 745, 748, 741, 752, 86, 759,
1682 753, 744, 86, 755, 756, 3136, 758, 747, 86, 760,
1683 757, 86, 763, 749, 86, 764, 762, 86, 770, 86,
1684 751, 86, 754, 86, 752, 86, 759, 753, 86, 86,
1685 755, 756, 86, 758, 761, 765, 760, 757, 86, 763,
1686 767, 768, 86, 762, 766, 769, 772, 776, 86, 754,
1687 86, 86, 86, 86, 771, 773, 774, 779, 775, 86,
1688 86, 761, 765, 778, 781, 780, 783, 767, 768, 86,
1689 86, 766, 769, 772, 776, 86, 86, 777, 782, 791,
1690 3136, 771, 86, 786, 86, 775, 86, 86, 86, 86,
1691
1692 778, 796, 780, 783, 784, 787, 86, 86, 788, 785,
1693 792, 793, 86, 797, 777, 782, 800, 794, 86, 86,
1694 786, 86, 789, 790, 795, 802, 3136, 86, 796, 86,
1695 86, 86, 787, 86, 805, 788, 86, 792, 793, 86,
1696 797, 798, 801, 806, 794, 86, 807, 86, 86, 789,
1697 790, 795, 802, 803, 808, 809, 799, 86, 804, 815,
1698 86, 805, 86, 810, 3136, 86, 811, 812, 798, 801,
1699 806, 86, 86, 807, 816, 86, 86, 814, 813, 3136,
1700 86, 808, 809, 799, 86, 86, 86, 818, 817, 820,
1701 810, 86, 821, 811, 812, 819, 822, 86, 86, 86,
1702
1703 86, 816, 824, 826, 814, 813, 86, 86, 823, 827,
1704 829, 86, 825, 828, 818, 817, 820, 86, 86, 821,
1705 86, 86, 819, 822, 836, 86, 3136, 3136, 838, 830,
1706 826, 831, 832, 86, 86, 823, 827, 829, 86, 825,
1707 828, 86, 86, 833, 834, 835, 86, 837, 841, 840,
1708 839, 836, 86, 86, 86, 838, 830, 86, 831, 832,
1709 86, 843, 3136, 848, 86, 842, 846, 847, 844, 850,
1710 833, 834, 835, 86, 837, 841, 840, 839, 86, 86,
1711 86, 845, 849, 86, 851, 86, 854, 86, 843, 86,
1712 848, 86, 842, 846, 847, 844, 850, 853, 852, 855,
1713
1714 856, 857, 86, 862, 86, 3136, 86, 86, 845, 849,
1715 858, 851, 86, 854, 859, 3136, 86, 86, 86, 860,
1716 861, 86, 863, 864, 853, 852, 855, 856, 857, 865,
1717 862, 866, 167, 86, 86, 86, 86, 858, 86, 3136,
1718 867, 859, 86, 869, 870, 871, 860, 861, 868, 863,
1719 864, 872, 873, 86, 874, 876, 865, 86, 86, 86,
1720 877, 875, 86, 878, 3136, 879, 86, 867, 3136, 86,
1721 86, 870, 871, 880, 891, 868, 86, 86, 883, 873,
1722 881, 874, 876, 86, 86, 86, 86, 877, 875, 86,
1723 893, 894, 879, 86, 882, 86, 86, 3136, 3136, 892,
1724
1725 880, 891, 3136, 895, 896, 883, 3136, 881, 86, 86,
1726 897, 901, 86, 3136, 3136, 86, 904, 893, 894, 898,
1727 86, 882, 884, 902, 86, 885, 892, 899, 900, 886,
1728 895, 896, 887, 86, 903, 912, 86, 897, 901, 888,
1729 889, 86, 890, 941, 86, 86, 898, 86, 86, 884,
1730 902, 914, 885, 86, 899, 900, 886, 86, 913, 887,
1731 86, 903, 912, 915, 86, 86, 888, 889, 916, 890,
1732 905, 906, 917, 907, 919, 86, 908, 918, 914, 920,
1733 923, 909, 3136, 922, 3136, 913, 3136, 910, 911, 924,
1734 915, 926, 86, 3136, 86, 916, 86, 905, 906, 921,
1735
1736 907, 919, 86, 908, 86, 86, 920, 923, 909, 86,
1737 922, 86, 925, 86, 910, 911, 924, 927, 86, 929,
1738 928, 931, 930, 932, 933, 935, 921, 86, 86, 934,
1739 947, 86, 937, 940, 86, 86, 3136, 86, 86, 925,
1740 936, 943, 86, 86, 927, 86, 929, 928, 931, 930,
1741 932, 933, 935, 86, 938, 86, 934, 939, 86, 937,
1742 940, 942, 86, 86, 944, 946, 948, 936, 86, 945,
1743 950, 3136, 86, 949, 3136, 3136, 952, 951, 954, 955,
1744 953, 938, 957, 86, 939, 3136, 3136, 86, 942, 956,
1745 958, 86, 946, 959, 961, 86, 86, 86, 86, 86,
1746
1747 949, 86, 86, 952, 951, 86, 86, 953, 86, 957,
1748 960, 962, 86, 86, 963, 964, 956, 958, 86, 965,
1749 959, 86, 966, 968, 967, 3136, 86, 86, 3136, 86,
1750 969, 971, 972, 86, 974, 970, 86, 960, 962, 977,
1751 86, 963, 86, 973, 978, 975, 965, 86, 1000, 966,
1752 968, 967, 86, 86, 86, 86, 86, 969, 971, 972,
1753 976, 974, 970, 86, 979, 980, 982, 981, 987, 3136,
1754 973, 86, 975, 983, 86, 86, 86, 86, 984, 986,
1755 86, 989, 988, 990, 86, 3136, 985, 976, 86, 86,
1756 86, 979, 980, 982, 981, 86, 993, 995, 997, 3136,
1757
1758 983, 86, 86, 86, 86, 984, 986, 991, 989, 988,
1759 990, 992, 994, 985, 86, 86, 996, 998, 86, 86,
1760 86, 86, 999, 993, 995, 997, 86, 1001, 1003, 1004,
1761 86, 1002, 1005, 1008, 991, 1006, 86, 3136, 992, 994,
1762 1009, 1007, 86, 996, 998, 86, 86, 86, 86, 999,
1763 1011, 1010, 1012, 86, 1001, 1003, 1004, 86, 1002, 1005,
1764 86, 1014, 1006, 86, 1017, 1013, 86, 1009, 1007, 86,
1765 1019, 86, 86, 1015, 1018, 1016, 1020, 1011, 1010, 1012,
1766 1021, 86, 86, 86, 1022, 1023, 1024, 86, 1014, 1031,
1767 3136, 1025, 1013, 1028, 3136, 1026, 86, 1019, 1029, 86,
1768
1769 1015, 1030, 1016, 1027, 86, 1032, 86, 1021, 86, 86,
1770 86, 1035, 1034, 1024, 1033, 86, 86, 86, 1025, 1037,
1771 1028, 86, 1026, 86, 1036, 1029, 86, 86, 1030, 86,
1772 1027, 86, 1032, 1038, 1039, 1040, 1042, 3136, 1044, 1034,
1773 1041, 1033, 86, 86, 1045, 1043, 86, 1046, 86, 86,
1774 1048, 1036, 1049, 1047, 86, 86, 86, 1050, 86, 1051,
1775 1038, 1039, 1059, 1042, 86, 1044, 86, 167, 86, 1060,
1776 86, 1045, 1043, 1061, 1046, 86, 1052, 1048, 1062, 1049,
1777 1047, 1063, 86, 86, 1050, 86, 1051, 1085, 86, 1059,
1778 3136, 1064, 86, 1067, 1066, 3136, 1060, 1065, 1068, 3136,
1779
1780 1061, 3136, 3136, 1052, 1053, 86, 1054, 86, 1063, 86,
1781 1055, 86, 1056, 1072, 86, 86, 1071, 1057, 1064, 86,
1782 1067, 1066, 1058, 1073, 1065, 1068, 86, 1069, 86, 1075,
1783 1078, 1053, 1070, 1054, 86, 1074, 1079, 1055, 1076, 1056,
1784 1072, 86, 1080, 1071, 1057, 86, 86, 1081, 1077, 1058,
1785 1073, 1082, 1083, 86, 1086, 86, 1075, 1078, 86, 86,
1786 86, 1084, 1074, 1079, 86, 1076, 1087, 1089, 1090, 1080,
1787 86, 1092, 3136, 86, 1081, 1077, 1091, 3136, 1082, 1083,
1788 86, 1100, 86, 1101, 86, 1105, 86, 1102, 1084, 1104,
1789 3136, 1103, 3136, 86, 1106, 1090, 86, 1110, 1092, 86,
1790
1791 86, 3136, 3136, 1091, 1093, 86, 86, 86, 1100, 1094,
1792 1101, 1095, 1105, 86, 1102, 86, 1104, 1096, 1103, 1107,
1793 1108, 1106, 1097, 1098, 86, 1109, 1113, 1114, 86, 1099,
1794 86, 1093, 86, 86, 1111, 1112, 1094, 1115, 1095, 1116,
1795 1117, 1118, 86, 1123, 1096, 86, 1107, 1108, 1135, 1097,
1796 1098, 86, 1109, 86, 1114, 1120, 1099, 86, 86, 1119,
1797 1121, 1111, 1112, 86, 1115, 1122, 1116, 86, 1118, 1125,
1798 1124, 1126, 86, 86, 1127, 86, 86, 86, 86, 1130,
1799 86, 86, 1120, 1129, 1133, 1131, 1119, 1121, 86, 1128,
1800 86, 1132, 1122, 86, 86, 3136, 1125, 1124, 1126, 1139,
1801
1802 1137, 1127, 86, 86, 1134, 86, 1130, 86, 1136, 86,
1803 1129, 1133, 1131, 86, 86, 1138, 1128, 1140, 1132, 86,
1804 1141, 1142, 86, 1143, 1144, 1146, 1139, 1137, 3136, 86,
1805 86, 1134, 1145, 86, 1147, 1136, 1148, 1153, 1150, 1149,
1806 1154, 3136, 1138, 86, 1140, 86, 86, 1141, 1142, 86,
1807 1143, 1144, 1146, 86, 86, 1155, 1156, 1151, 1160, 1145,
1808 86, 1147, 1152, 86, 1153, 1150, 1149, 1154, 86, 86,
1809 1157, 1159, 86, 1158, 1161, 1162, 3136, 86, 1164, 86,
1810 86, 1163, 1155, 1156, 86, 1160, 86, 1165, 86, 86,
1811 1166, 1167, 1168, 1170, 1172, 1179, 1169, 1157, 1159, 86,
1812
1813 1158, 1161, 86, 1171, 86, 86, 1173, 86, 1163, 1174,
1814 86, 1175, 86, 1176, 1165, 86, 86, 1166, 1167, 1168,
1815 1170, 1172, 1178, 1169, 1177, 86, 86, 86, 86, 1180,
1816 1171, 86, 1181, 1173, 86, 86, 1174, 1182, 1175, 1183,
1817 1176, 1184, 3136, 86, 1185, 1187, 86, 1186, 1189, 1178,
1818 86, 1177, 86, 86, 1188, 86, 86, 1190, 1191, 1181,
1819 1192, 1193, 86, 86, 1182, 1195, 1183, 86, 1184, 1194,
1820 1198, 1185, 1187, 1197, 1186, 1189, 1196, 1199, 86, 1200,
1821 86, 1188, 86, 86, 3136, 86, 1203, 1192, 1193, 86,
1822 86, 86, 1201, 1202, 1205, 86, 1194, 86, 1206, 86,
1823
1824 1197, 1204, 86, 1196, 1199, 1208, 86, 1207, 1210, 86,
1825 86, 86, 1209, 1203, 86, 1211, 86, 1212, 86, 1201,
1826 1202, 1205, 86, 86, 1213, 1206, 1214, 86, 1204, 1215,
1827 1216, 1217, 1208, 1220, 1207, 1210, 86, 1218, 86, 1209,
1828 1225, 1221, 86, 1223, 86, 86, 1222, 86, 86, 86,
1829 3136, 1213, 86, 1214, 86, 1224, 86, 1216, 1217, 86,
1830 1220, 1227, 1226, 86, 1218, 1228, 1229, 86, 1221, 167,
1831 1223, 1232, 1230, 1222, 86, 1234, 1233, 86, 1231, 1235,
1832 3136, 86, 1224, 86, 3136, 1237, 1236, 1238, 1227, 1226,
1833 3136, 1239, 1228, 1229, 86, 1241, 86, 1247, 86, 1230,
1834
1835 3136, 3136, 1240, 1233, 86, 1231, 1244, 86, 86, 86,
1836 86, 86, 1237, 1236, 1238, 86, 1242, 86, 1239, 1243,
1837 1245, 1248, 1241, 1246, 86, 1250, 86, 86, 86, 1240,
1838 1249, 86, 86, 1244, 86, 1251, 1257, 86, 1252, 86,
1839 3136, 1258, 1259, 1242, 1253, 86, 1243, 1245, 1248, 1260,
1840 1246, 1263, 1250, 1254, 1261, 1255, 86, 1249, 1256, 86,
1841 1262, 1265, 1251, 1257, 86, 1252, 86, 86, 1258, 1259,
1842 86, 1253, 1266, 86, 86, 86, 86, 3136, 1263, 1267,
1843 1254, 1261, 1255, 1264, 1268, 1256, 1270, 1262, 1265, 1269,
1844 86, 86, 86, 1271, 1272, 1273, 1274, 1275, 1276, 1266,
1845
1846 1280, 86, 86, 1278, 86, 86, 1267, 1277, 86, 86,
1847 1264, 1268, 86, 1270, 1279, 1372, 1269, 1285, 86, 86,
1848 1271, 1272, 86, 1274, 1275, 1276, 86, 1280, 1281, 86,
1849 1278, 1282, 86, 1283, 1277, 1284, 1286, 86, 1287, 86,
1850 86, 1279, 86, 1288, 1285, 1289, 86, 86, 86, 86,
1851 1290, 86, 1291, 1295, 86, 1281, 1294, 1296, 1282, 1292,
1852 1283, 1293, 1284, 1286, 86, 1287, 86, 1297, 86, 86,
1853 1288, 86, 1289, 1298, 86, 1299, 1300, 1290, 1301, 1291,
1854 86, 1304, 86, 1294, 1296, 86, 1292, 1306, 1293, 86,
1855 1302, 1305, 86, 86, 1297, 1303, 3136, 1307, 86, 1314,
1856
1857 1298, 86, 1299, 1300, 86, 1301, 1316, 1333, 1304, 1315,
1858 1318, 3136, 3136, 86, 1306, 1317, 1320, 1319, 1305, 1323,
1859 86, 3136, 86, 86, 1307, 1308, 1314, 86, 1309, 1310,
1860 3136, 1321, 86, 1311, 1333, 86, 1315, 1318, 86, 1312,
1861 1322, 86, 1317, 1313, 1319, 86, 1323, 86, 86, 1325,
1862 1330, 1324, 1308, 86, 1329, 1309, 1310, 86, 1321, 1326,
1863 1311, 1327, 86, 86, 1328, 1331, 1312, 1322, 86, 1335,
1864 1313, 86, 86, 1332, 1336, 86, 1325, 1330, 1324, 3136,
1865 1334, 1329, 1337, 86, 1344, 1338, 1326, 1347, 1327, 86,
1866 3136, 1328, 1331, 3136, 1348, 86, 1345, 1346, 3136, 3136,
1867
1868 1332, 86, 3136, 86, 86, 1351, 86, 1334, 86, 1337,
1869 86, 1344, 1338, 1339, 1347, 1349, 1356, 86, 1340, 1350,
1870 1341, 1348, 1342, 86, 1343, 86, 1354, 86, 86, 1352,
1871 1355, 86, 1351, 1359, 1353, 86, 1358, 1357, 86, 1361,
1872 1339, 86, 1349, 1356, 86, 1340, 1350, 1341, 1360, 1342,
1873 86, 1343, 86, 1354, 86, 1362, 86, 1355, 1363, 1364,
1874 1359, 86, 1369, 1358, 1357, 1368, 1361, 1365, 1366, 1367,
1875 1370, 86, 86, 1374, 1375, 1360, 1371, 3136, 86, 1373,
1876 86, 1376, 86, 86, 86, 1363, 1364, 86, 1377, 1369,
1877 86, 86, 1368, 1379, 1365, 1366, 1367, 1370, 86, 86,
1878
1879 86, 1375, 1380, 1371, 1378, 86, 1373, 1381, 1376, 1382,
1880 86, 86, 86, 1383, 86, 1377, 1384, 1385, 1386, 1387,
1881 1379, 1388, 3136, 86, 86, 1389, 1390, 3136, 86, 86,
1882 3136, 1378, 1391, 86, 1381, 1393, 86, 1392, 86, 86,
1883 1383, 1394, 1395, 1384, 1385, 1386, 86, 1405, 1388, 86,
1884 86, 1396, 1389, 1390, 86, 86, 86, 1397, 1398, 1391,
1885 86, 1399, 1393, 86, 1392, 1401, 86, 1400, 1394, 1395,
1886 1403, 86, 1406, 1402, 1405, 1408, 1404, 1409, 1396, 86,
1887 1410, 1407, 1412, 86, 1397, 1398, 86, 86, 1399, 86,
1888 1415, 1411, 1401, 86, 1400, 86, 86, 1403, 86, 1406,
1889
1890 1402, 86, 1408, 1404, 1413, 1416, 86, 1414, 1407, 86,
1891 1421, 3136, 86, 86, 86, 86, 1417, 1415, 1411, 1419,
1892 1420, 1418, 86, 86, 86, 1422, 86, 1424, 1423, 1427,
1893 3136, 1413, 86, 167, 1414, 1428, 86, 1431, 1425, 1429,
1894 3136, 3136, 86, 1417, 1426, 1430, 1419, 1420, 1418, 86,
1895 86, 86, 86, 1432, 86, 1423, 1427, 86, 1436, 86,
1896 86, 1434, 1428, 86, 1431, 1425, 1429, 1433, 1435, 86,
1897 86, 1426, 1430, 1437, 1438, 1439, 1440, 86, 1442, 1443,
1898 1432, 1441, 3136, 86, 1444, 86, 1445, 86, 1434, 3136,
1899 86, 1454, 1446, 1452, 1433, 1435, 86, 86, 1451, 86,
1900
1901 1437, 1438, 1439, 86, 86, 1442, 1443, 1449, 86, 1447,
1902 1450, 1444, 1448, 1445, 1453, 1455, 86, 1456, 86, 1446,
1903 1452, 86, 1459, 86, 3136, 1451, 1457, 86, 1462, 86,
1904 86, 1458, 1463, 86, 1449, 1465, 1447, 1450, 86, 1448,
1905 3136, 1453, 1455, 1461, 1456, 1460, 86, 1464, 1467, 1459,
1906 86, 1470, 86, 1466, 86, 1462, 86, 86, 86, 1463,
1907 86, 86, 1465, 1471, 1468, 1474, 3136, 1469, 1475, 1477,
1908 1461, 3136, 1460, 86, 1464, 1467, 86, 86, 1470, 1472,
1909 1466, 1473, 86, 86, 1476, 1481, 86, 1478, 86, 86,
1910 1471, 1468, 86, 1479, 1469, 1475, 1477, 86, 1482, 86,
1911
1912 1483, 1480, 1492, 1485, 1484, 86, 1472, 86, 1473, 86,
1913 1486, 1476, 1481, 86, 1478, 1489, 1493, 1487, 86, 1488,
1914 1479, 86, 86, 1491, 1496, 1482, 86, 1483, 1480, 86,
1915 1485, 1484, 1490, 1497, 86, 1494, 86, 1486, 86, 1495,
1916 86, 1500, 1489, 1499, 1487, 86, 1488, 3136, 86, 1498,
1917 1491, 86, 86, 1502, 86, 1503, 86, 1501, 1505, 1490,
1918 1497, 86, 1494, 3136, 1504, 86, 1495, 86, 1500, 86,
1919 1499, 86, 1506, 86, 1507, 1508, 1498, 86, 1514, 1513,
1920 1502, 86, 1503, 86, 1501, 1505, 86, 86, 1509, 1515,
1921 1511, 1504, 1516, 1510, 86, 1512, 1517, 86, 3136, 1506,
1922
1923 86, 1507, 1508, 1518, 86, 1514, 1513, 1519, 1522, 1521,
1924 1520, 1523, 1524, 86, 86, 86, 1515, 86, 86, 1516,
1925 86, 1525, 86, 1517, 1526, 86, 1528, 1527, 3136, 3136,
1926 1518, 3136, 86, 86, 1519, 1529, 1521, 1520, 1523, 1524,
1927 86, 1530, 1531, 86, 1532, 1535, 1533, 1539, 86, 86,
1928 86, 1526, 86, 86, 1527, 1534, 1537, 86, 86, 86,
1929 1536, 86, 1529, 1538, 1540, 1543, 1541, 1544, 1530, 1531,
1930 1545, 1532, 1535, 1533, 86, 1542, 3136, 1551, 86, 86,
1931 86, 1550, 1534, 1537, 86, 86, 86, 1536, 86, 86,
1932 1538, 86, 1543, 1541, 1544, 1546, 1549, 1545, 86, 1547,
1933
1934 1552, 1554, 1542, 86, 1551, 86, 1553, 86, 1550, 1555,
1935 1556, 1560, 1548, 1557, 3136, 3136, 1558, 86, 3136, 1559,
1936 86, 1561, 1546, 1549, 1566, 86, 1547, 1552, 86, 1565,
1937 86, 86, 3136, 1553, 86, 1571, 1555, 1570, 1560, 1548,
1938 1557, 86, 86, 1558, 86, 1562, 1559, 1563, 1561, 1567,
1939 1564, 86, 86, 1568, 1573, 3136, 86, 86, 86, 86,
1940 1569, 86, 1572, 86, 1570, 1575, 1574, 86, 1576, 86,
1941 1578, 1579, 1562, 1577, 1563, 3136, 1567, 1564, 86, 86,
1942 1568, 86, 86, 1580, 86, 1581, 1585, 1569, 1587, 1572,
1943 86, 1582, 86, 1574, 86, 1576, 1583, 1578, 1579, 1584,
1944
1945 1577, 86, 86, 86, 1586, 1597, 1588, 86, 86, 1590,
1946 1580, 86, 1581, 1585, 86, 1587, 1589, 86, 1582, 1592,
1947 1591, 86, 86, 1583, 86, 86, 1584, 1593, 1594, 1595,
1948 1596, 1586, 86, 1588, 1599, 1598, 1590, 86, 1600, 1601,
1949 86, 86, 86, 1589, 86, 86, 1592, 1591, 1603, 1606,
1950 1605, 86, 1602, 3136, 1593, 1594, 1595, 1596, 86, 1604,
1951 1608, 1599, 1598, 1607, 86, 1600, 1601, 86, 86, 86,
1952 1609, 86, 86, 1614, 167, 1603, 86, 1605, 1612, 1602,
1953 1610, 1611, 1613, 86, 86, 1616, 1604, 1608, 86, 1615,
1954 1607, 86, 86, 1619, 1617, 1618, 1620, 1609, 1623, 86,
1955
1956 1614, 86, 1621, 86, 1622, 1612, 1625, 1610, 1611, 1613,
1957 1624, 86, 1616, 86, 1627, 86, 1615, 86, 1629, 1626,
1958 1619, 1617, 1618, 1620, 1645, 1628, 86, 86, 1630, 1621,
1959 86, 1622, 86, 86, 1632, 3136, 1633, 1624, 86, 86,
1960 1631, 86, 1635, 86, 1634, 1629, 1626, 1636, 1637, 1639,
1961 86, 86, 1628, 1638, 3136, 1630, 86, 86, 86, 86,
1962 86, 1632, 86, 1633, 1649, 1646, 1640, 1631, 1650, 1635,
1963 1641, 1634, 86, 1653, 1636, 1637, 1639, 86, 1647, 86,
1964 1638, 86, 86, 1642, 1652, 1654, 1643, 86, 1656, 3136,
1965 86, 1649, 1646, 1640, 1648, 1650, 1655, 1641, 1644, 1651,
1966
1967 86, 86, 86, 1657, 1658, 1647, 1659, 86, 86, 1665,
1968 1642, 1652, 1663, 1643, 86, 1656, 1662, 86, 86, 86,
1969 1660, 1648, 1661, 1655, 86, 1644, 1651, 1664, 86, 86,
1970 1657, 86, 1666, 1659, 86, 1667, 86, 1668, 1669, 1663,
1971 1671, 86, 86, 1662, 1670, 1674, 1672, 1660, 1675, 1661,
1972 1673, 86, 86, 3136, 1664, 86, 3136, 86, 3136, 86,
1973 1681, 1676, 1667, 1677, 86, 1669, 86, 86, 86, 86,
1974 1678, 1670, 1674, 1672, 86, 1675, 86, 1673, 1679, 1682,
1975 1680, 1685, 1683, 1684, 1686, 86, 86, 86, 1676, 86,
1976 1677, 1687, 86, 86, 86, 1688, 86, 1678, 86, 1689,
1977
1978 1690, 1691, 1694, 1696, 3136, 1679, 1682, 1680, 1685, 1683,
1979 1684, 86, 86, 1692, 86, 1693, 86, 86, 1687, 1695,
1980 86, 3136, 1688, 86, 86, 86, 1689, 1690, 1691, 1694,
1981 1696, 86, 1697, 1699, 1703, 1698, 1700, 1702, 1704, 86,
1982 1692, 1701, 1693, 1705, 86, 1707, 1695, 1708, 86, 1709,
1983 86, 1706, 3136, 1710, 86, 3136, 1721, 1712, 86, 1697,
1984 1699, 1703, 1698, 1700, 1702, 86, 86, 86, 1701, 1711,
1985 86, 86, 1707, 1713, 1708, 1714, 86, 86, 1706, 86,
1986 1710, 1715, 1717, 86, 1712, 1716, 1718, 1720, 86, 1719,
1987 86, 1722, 86, 1724, 1723, 86, 1711, 1725, 1726, 1727,
1988
1989 1713, 86, 1714, 86, 86, 86, 86, 86, 1715, 1717,
1990 86, 86, 1716, 1718, 1720, 1728, 1719, 1729, 86, 86,
1991 1724, 1723, 1730, 1732, 1725, 1726, 1727, 1731, 1733, 1734,
1992 86, 86, 1743, 1735, 86, 1739, 1740, 1744, 3136, 1742,
1993 1737, 3136, 1728, 1738, 1729, 86, 86, 1736, 86, 1730,
1994 1732, 86, 1749, 86, 1731, 1733, 1734, 86, 86, 86,
1995 1735, 1746, 1739, 1740, 86, 1741, 1742, 1737, 1745, 1748,
1996 1738, 86, 1747, 86, 1736, 1751, 1750, 86, 1752, 1753,
1997 1754, 86, 1756, 1758, 86, 86, 1755, 1757, 1746, 86,
1998 1759, 86, 1741, 1762, 1768, 1745, 1748, 1763, 3136, 1747,
1999
2000 86, 86, 86, 1750, 86, 1760, 1753, 86, 86, 1756,
2001 86, 1761, 86, 1755, 1757, 86, 86, 1759, 1764, 1765,
2002 1766, 1768, 1767, 1769, 1763, 86, 86, 86, 1770, 86,
2003 1771, 1772, 1760, 1774, 1775, 1777, 1782, 86, 1761, 86,
2004 86, 86, 1776, 86, 1778, 1764, 1765, 1766, 3136, 1767,
2005 1769, 86, 1773, 1780, 1779, 1770, 86, 1771, 86, 1781,
2006 1786, 86, 86, 86, 1784, 86, 86, 1783, 86, 1776,
2007 1787, 1778, 86, 86, 1785, 86, 1788, 86, 1789, 1773,
2008 1780, 1779, 1790, 86, 1791, 1796, 1781, 86, 1793, 1792,
2009 1795, 1784, 86, 1794, 1783, 3136, 1800, 1787, 1798, 86,
2010
2011 86, 1785, 86, 1788, 86, 1789, 86, 86, 167, 1790,
2012 1797, 1791, 86, 86, 1799, 1793, 1792, 1795, 86, 1801,
2013 1794, 1803, 86, 86, 1802, 1798, 1805, 1804, 1806, 1807,
2014 1808, 1809, 86, 1811, 86, 86, 86, 1797, 1810, 1812,
2015 86, 1799, 86, 1813, 86, 86, 1801, 1814, 1803, 1815,
2016 1816, 1802, 1817, 1805, 1804, 1806, 1818, 1808, 1809, 86,
2017 86, 86, 1819, 86, 1820, 1810, 1812, 86, 1821, 86,
2018 86, 86, 1822, 3136, 1814, 86, 1815, 86, 1825, 86,
2019 1826, 1823, 86, 1818, 1824, 1827, 1828, 86, 86, 1819,
2020 86, 1820, 1829, 86, 1830, 1821, 1831, 1838, 1839, 1822,
2021
2022 86, 86, 86, 86, 86, 1825, 1836, 1826, 1823, 1832,
2023 1833, 1824, 1827, 1828, 86, 1837, 86, 86, 1834, 1829,
2024 1840, 1830, 1843, 1831, 86, 1835, 86, 86, 86, 86,
2025 86, 1841, 1842, 1836, 1848, 1844, 1832, 1833, 1847, 86,
2026 86, 1849, 1837, 86, 1845, 1834, 1846, 1840, 1850, 1843,
2027 1851, 1855, 1835, 1852, 1857, 86, 1859, 86, 1841, 1842,
2028 86, 86, 1844, 1853, 86, 1847, 1854, 1858, 86, 86,
2029 1861, 1845, 86, 1846, 1856, 1850, 1860, 86, 86, 86,
2030 1852, 1862, 1863, 86, 1864, 86, 86, 1865, 86, 1867,
2031 1853, 86, 1874, 1854, 1858, 1866, 3136, 86, 1882, 1876,
2032
2033 1872, 1856, 86, 1860, 1877, 1873, 86, 86, 1862, 1863,
2034 1879, 86, 86, 86, 1865, 1878, 1875, 86, 1868, 1869,
2035 1870, 86, 1866, 86, 86, 1871, 1881, 1872, 86, 1886,
2036 86, 86, 1873, 86, 1880, 86, 1883, 1879, 86, 1887,
2037 86, 1884, 1878, 1875, 1888, 1868, 1869, 1870, 86, 1885,
2038 86, 1889, 1871, 1881, 86, 86, 86, 1890, 86, 1891,
2039 1892, 1880, 86, 1883, 1894, 1893, 1887, 1895, 1884, 86,
2040 86, 1888, 86, 1898, 1899, 1896, 1885, 1897, 1889, 86,
2041 1900, 1904, 1901, 1903, 1890, 86, 1891, 86, 86, 1902,
2042 1910, 86, 1893, 86, 1895, 86, 1905, 86, 1906, 86,
2043
2044 1898, 86, 1896, 86, 1897, 1909, 86, 86, 1904, 1901,
2045 1903, 1907, 86, 1911, 1912, 1908, 1902, 1913, 1914, 1915,
2046 86, 1916, 86, 1905, 86, 1906, 86, 86, 1918, 1917,
2047 1920, 1919, 1909, 1925, 86, 86, 1921, 1926, 1907, 86,
2048 1911, 1912, 1908, 86, 1922, 86, 86, 86, 1916, 86,
2049 86, 1923, 86, 86, 1924, 1918, 1917, 1920, 1919, 1927,
2050 86, 1928, 1933, 1921, 1934, 86, 86, 1929, 1931, 86,
2051 3136, 1922, 1932, 86, 1935, 86, 1941, 86, 1923, 1937,
2052 86, 1924, 86, 1930, 86, 1936, 1927, 86, 1928, 1933,
2053 86, 86, 1938, 1939, 1929, 1931, 1952, 86, 1940, 1932,
2054
2055 1942, 1935, 1943, 86, 1945, 1946, 1937, 1944, 1947, 1948,
2056 1930, 86, 1936, 1955, 86, 86, 86, 86, 86, 1938,
2057 1939, 86, 1949, 86, 1954, 1940, 1950, 1942, 86, 1943,
2058 1951, 86, 1946, 86, 1944, 1947, 1948, 86, 1953, 1957,
2059 86, 1956, 1958, 1959, 86, 1961, 86, 1962, 1960, 1949,
2060 86, 1954, 86, 1950, 1963, 1966, 1964, 1951, 1967, 86,
2061 86, 1965, 86, 1971, 1969, 1953, 1957, 86, 1956, 1958,
2062 1959, 3136, 1961, 1973, 86, 1960, 1968, 86, 1970, 1972,
2063 1976, 86, 1974, 1975, 1977, 86, 86, 86, 86, 86,
2064 86, 1969, 1978, 86, 86, 86, 86, 86, 1979, 1980,
2065
2066 1973, 1981, 1986, 1968, 1987, 1970, 1972, 1982, 1983, 1974,
2067 1975, 1977, 86, 1984, 86, 86, 86, 1985, 1989, 1991,
2068 167, 1990, 3136, 3136, 86, 1979, 1980, 3136, 1981, 86,
2069 86, 86, 1988, 1992, 1982, 1983, 1994, 86, 1993, 86,
2070 1984, 86, 86, 86, 1985, 1995, 1991, 1996, 1990, 1997,
2071 86, 1998, 1999, 2001, 86, 2000, 86, 2005, 86, 1988,
2072 1992, 2003, 86, 1994, 2006, 1993, 86, 86, 2002, 86,
2073 2004, 2008, 1995, 2011, 1996, 86, 1997, 86, 1998, 1999,
2074 86, 86, 2000, 86, 2005, 2010, 86, 2007, 2003, 86,
2075 2009, 86, 86, 86, 86, 2002, 86, 2004, 2008, 86,
2076
2077 2011, 2012, 2013, 2015, 2014, 2017, 2016, 3136, 3136, 2018,
2078 2020, 2021, 2010, 86, 2007, 86, 2022, 2009, 86, 86,
2079 2019, 86, 2023, 86, 2024, 2028, 2026, 2027, 2012, 86,
2080 2015, 2014, 2017, 2016, 86, 86, 2018, 2020, 2021, 86,
2081 86, 86, 86, 2022, 2025, 2029, 2030, 2019, 86, 2023,
2082 86, 2024, 86, 2026, 2027, 2031, 2032, 86, 2034, 2036,
2083 2035, 2033, 3136, 3136, 2037, 2038, 86, 3136, 86, 86,
2084 86, 2025, 2029, 2030, 86, 2039, 2040, 3136, 2043, 2041,
2085 2044, 3136, 2031, 2032, 86, 86, 2036, 2035, 2033, 86,
2086 86, 2037, 86, 2042, 86, 2045, 86, 2046, 86, 2047,
2087
2088 86, 86, 2039, 2040, 86, 2043, 2041, 2044, 2048, 2049,
2089 86, 2053, 86, 2050, 86, 2054, 2051, 2055, 86, 2056,
2090 2042, 2058, 2045, 86, 2046, 86, 2047, 2057, 86, 2052,
2091 86, 2059, 2060, 2061, 86, 2048, 2049, 86, 2053, 86,
2092 2050, 2062, 2054, 2051, 86, 86, 2056, 2064, 2058, 2066,
2093 2065, 3136, 2063, 86, 2057, 86, 2052, 2068, 2059, 2060,
2094 2061, 86, 2067, 2069, 2074, 2071, 86, 86, 2062, 86,
2095 86, 86, 2070, 86, 2064, 86, 2066, 2065, 86, 2063,
2096 2072, 2073, 2075, 86, 2068, 3136, 2077, 2084, 2076, 2067,
2097 2069, 86, 2071, 2080, 86, 2078, 2079, 86, 2082, 2070,
2098
2099 2088, 86, 86, 3136, 2083, 86, 2085, 2072, 2073, 2075,
2100 86, 86, 2081, 2077, 2084, 2076, 2086, 86, 86, 86,
2101 2080, 2087, 2078, 2079, 86, 86, 86, 86, 2089, 2090,
2102 86, 2083, 2092, 2085, 86, 2091, 2093, 3136, 3136, 2081,
2103 2094, 86, 86, 2086, 2095, 2098, 2099, 2103, 2087, 2096,
2104 3136, 2100, 2102, 86, 86, 2089, 2090, 2097, 86, 2101,
2105 3136, 86, 2091, 2093, 86, 86, 2104, 2094, 86, 86,
2106 86, 2095, 86, 2099, 2103, 86, 2096, 86, 2100, 2102,
2107 2105, 2107, 2108, 2106, 2097, 86, 2101, 2109, 86, 2112,
2108 2113, 2114, 2110, 2104, 2111, 3136, 2117, 2116, 86, 2119,
2109
2110 2115, 3136, 2118, 86, 86, 86, 86, 2105, 2107, 2108,
2111 2106, 86, 86, 86, 2149, 3136, 2112, 2113, 2114, 86,
2112 86, 2111, 86, 2117, 2116, 2120, 86, 2115, 2121, 2118,
2113 2122, 2123, 2125, 2124, 86, 2126, 2127, 86, 2130, 2128,
2114 3136, 86, 2129, 86, 86, 86, 86, 86, 3136, 2133,
2115 86, 2137, 2120, 86, 2131, 2121, 86, 2122, 2123, 2125,
2116 2124, 86, 2126, 2127, 86, 2130, 2128, 2132, 2134, 2129,
2117 86, 2135, 86, 2136, 2138, 86, 2133, 2139, 2137, 2140,
2118 2141, 2131, 86, 86, 2151, 2142, 2143, 3136, 2144, 2145,
2119 2150, 2146, 86, 86, 2132, 2134, 167, 86, 2135, 2154,
2120
2121 2136, 2138, 2152, 86, 86, 2159, 2140, 86, 86, 86,
2122 86, 2151, 2142, 2143, 2147, 2144, 2145, 2153, 2146, 2148,
2123 2158, 86, 86, 2155, 86, 2160, 86, 2161, 2163, 2152,
2124 2162, 2164, 86, 3136, 2168, 2165, 2166, 2156, 86, 86,
2125 3136, 3136, 86, 2167, 2153, 2169, 86, 2158, 2157, 86,
2126 2155, 86, 2160, 86, 2161, 2171, 3136, 2162, 2164, 2174,
2127 86, 86, 2165, 86, 2156, 86, 86, 2170, 86, 2172,
2128 2167, 2173, 2169, 86, 86, 2157, 86, 2176, 86, 2175,
2129 2177, 86, 2171, 86, 2178, 2180, 2174, 2181, 2179, 86,
2130 2182, 2183, 86, 86, 2170, 86, 2172, 2184, 2173, 86,
2131
2132 2186, 2185, 86, 3136, 2176, 3136, 2175, 2177, 2188, 86,
2133 2190, 2178, 2180, 86, 2181, 2179, 2191, 2182, 86, 2193,
2134 86, 2189, 86, 86, 2184, 2187, 86, 2186, 2185, 86,
2135 86, 2192, 86, 2195, 2194, 2188, 2196, 2190, 2197, 2200,
2136 86, 86, 86, 2191, 86, 86, 86, 2198, 2189, 2199,
2137 86, 2204, 2187, 86, 2201, 2203, 2202, 86, 2192, 3136,
2138 2195, 2194, 86, 2196, 2205, 2197, 2200, 86, 2206, 86,
2139 2207, 2211, 2208, 2209, 2198, 2210, 2199, 2212, 86, 3136,
2140 2214, 2201, 2203, 2202, 86, 86, 86, 86, 2215, 2218,
2141 2219, 2205, 86, 2213, 86, 2206, 2220, 2207, 86, 2208,
2142
2143 2209, 86, 2210, 2216, 86, 86, 2217, 2214, 2224, 2223,
2144 2225, 2227, 86, 2229, 86, 2215, 86, 2219, 86, 2221,
2145 2213, 86, 2222, 2220, 86, 2228, 86, 2232, 2231, 86,
2146 2216, 2226, 2230, 2217, 86, 86, 2223, 86, 86, 86,
2147 86, 2233, 2235, 2234, 86, 2237, 2221, 2239, 2236, 2222,
2148 86, 2238, 2228, 86, 86, 2231, 86, 2240, 2226, 2230,
2149 86, 86, 2241, 2244, 2243, 86, 2245, 2242, 86, 2235,
2150 2234, 2247, 2237, 86, 86, 2236, 86, 3136, 2238, 2251,
2151 2248, 2246, 3136, 2249, 2240, 86, 2256, 86, 86, 86,
2152 2244, 2243, 86, 2245, 2242, 86, 2250, 2253, 86, 2254,
2153
2154 2258, 86, 2252, 2259, 86, 2255, 86, 2248, 2246, 86,
2155 2249, 86, 2257, 86, 2261, 86, 2263, 3136, 2262, 2260,
2156 86, 2264, 86, 2250, 2253, 86, 2254, 2258, 86, 2252,
2157 2259, 86, 2255, 2265, 86, 2266, 86, 2267, 86, 2257,
2158 2268, 86, 86, 2263, 86, 2262, 2260, 2269, 2264, 2277,
2159 2270, 86, 3136, 2274, 2271, 2281, 86, 2275, 2278, 2285,
2160 2265, 2276, 2266, 3136, 2267, 86, 86, 2268, 86, 2272,
2161 3136, 2273, 86, 2280, 2269, 86, 2277, 2270, 86, 86,
2162 2274, 2271, 2281, 86, 2275, 2278, 2279, 2282, 2276, 2283,
2163 2284, 86, 86, 2286, 2287, 86, 2272, 2288, 2273, 86,
2164
2165 2280, 2289, 86, 2290, 2291, 86, 2298, 2293, 2292, 86,
2166 3136, 86, 2299, 2279, 2282, 2294, 2283, 2284, 86, 86,
2167 2286, 2295, 2296, 86, 2288, 86, 86, 2302, 2289, 2300,
2168 2290, 2291, 86, 86, 2293, 2292, 2301, 2297, 86, 86,
2169 86, 2303, 2294, 86, 86, 86, 2304, 2305, 2295, 2296,
2170 86, 3136, 86, 2307, 2302, 2306, 2300, 2312, 2308, 2310,
2171 2309, 2311, 3136, 2301, 2297, 86, 2316, 86, 2303, 2313,
2172 86, 2314, 86, 86, 2305, 167, 2315, 86, 86, 2318,
2173 2307, 86, 2306, 2317, 86, 2308, 2310, 2309, 2311, 86,
2174 2319, 86, 3136, 2316, 86, 86, 2313, 2320, 2314, 2323,
2175
2176 2321, 2322, 2325, 2315, 2324, 2328, 2318, 86, 2326, 2329,
2177 2317, 2327, 2331, 3136, 86, 3136, 86, 2319, 2330, 86,
2178 2333, 2332, 2338, 2337, 2320, 2334, 86, 2321, 2322, 86,
2179 86, 2324, 86, 86, 86, 2326, 86, 86, 2327, 86,
2180 86, 86, 2335, 2336, 2339, 2330, 86, 2333, 2332, 86,
2181 2337, 86, 2334, 2340, 86, 86, 2341, 86, 2342, 2343,
2182 2345, 2346, 2344, 3136, 2348, 2351, 2352, 2347, 86, 2335,
2183 2336, 2339, 86, 86, 2350, 86, 2354, 2357, 86, 86,
2184 2340, 2349, 86, 2341, 86, 2342, 86, 2345, 2346, 2344,
2185 86, 86, 2351, 2352, 2347, 86, 86, 2353, 2355, 86,
2186
2187 2356, 2350, 2358, 2354, 2359, 86, 2360, 2361, 2349, 86,
2188 86, 2363, 2365, 86, 2362, 2366, 3136, 3136, 86, 2364,
2189 2368, 86, 86, 86, 2353, 2355, 2367, 2356, 86, 2358,
2190 2370, 2359, 2371, 2360, 2361, 2372, 86, 86, 86, 2365,
2191 3136, 2362, 2366, 86, 86, 2373, 2364, 2368, 2369, 86,
2192 2374, 2375, 86, 2367, 2376, 86, 86, 2370, 2378, 2371,
2193 86, 2377, 2379, 3136, 2380, 2381, 86, 86, 2382, 86,
2194 86, 86, 2373, 86, 2383, 2369, 2384, 86, 2375, 2385,
2195 2386, 86, 2387, 2388, 2393, 2378, 86, 2392, 2377, 2379,
2196 86, 2380, 2381, 2389, 86, 2382, 86, 2390, 86, 2391,
2197
2198 2394, 2383, 86, 86, 2395, 2397, 86, 86, 86, 2387,
2199 2388, 86, 86, 2396, 2392, 2398, 2401, 86, 86, 86,
2200 2389, 2399, 86, 2400, 2390, 86, 2391, 2394, 2402, 2403,
2201 2404, 86, 2397, 2406, 2409, 2405, 86, 2407, 2408, 3136,
2202 2396, 3136, 86, 2401, 86, 86, 3136, 86, 2399, 2412,
2203 2400, 86, 86, 2410, 86, 2402, 86, 2404, 2411, 86,
2204 2406, 2409, 2405, 86, 2407, 2408, 86, 2413, 2414, 2415,
2205 2416, 86, 2417, 86, 86, 2418, 2412, 2419, 2420, 2421,
2206 2410, 2422, 3136, 2423, 2426, 2411, 3136, 86, 2424, 2427,
2207 86, 86, 86, 2428, 2413, 2414, 86, 86, 2425, 86,
2208
2209 86, 86, 86, 86, 2419, 2420, 2421, 86, 2422, 86,
2210 2423, 2426, 2430, 86, 2429, 2424, 2427, 2431, 2432, 2436,
2211 86, 2433, 86, 2434, 3136, 2425, 86, 2435, 2438, 2437,
2212 2439, 2440, 2442, 86, 86, 86, 86, 86, 3136, 86,
2213 3136, 2429, 86, 86, 86, 2432, 2436, 2441, 2433, 2444,
2214 2434, 86, 2447, 2443, 2435, 2438, 2437, 2439, 86, 2442,
2215 86, 2445, 2446, 86, 86, 86, 2448, 167, 2449, 2450,
2216 2451, 2456, 2453, 3136, 2441, 86, 2444, 86, 2452, 2447,
2217 2443, 86, 86, 2455, 86, 2459, 86, 86, 2445, 2446,
2218 2454, 2457, 86, 2448, 86, 2449, 2450, 2451, 2456, 2453,
2219
2220 2458, 2460, 3136, 2461, 2467, 2452, 2462, 86, 2463, 2465,
2221 2455, 2464, 86, 86, 2468, 2466, 86, 2454, 2457, 3136,
2222 86, 86, 86, 86, 2474, 86, 3136, 2458, 86, 86,
2223 2461, 2467, 86, 2462, 86, 2463, 2465, 2469, 2464, 2470,
2224 2471, 2468, 2466, 2472, 86, 2473, 86, 86, 2475, 86,
2225 2476, 2474, 86, 2477, 2479, 86, 2478, 2482, 2480, 86,
2226 2481, 86, 86, 86, 2469, 2484, 2470, 2471, 2483, 3136,
2227 2472, 3136, 2473, 2487, 2493, 2475, 3136, 2476, 86, 2485,
2228 2477, 86, 86, 2478, 86, 2480, 86, 2481, 86, 2486,
2229 2488, 2492, 86, 86, 2489, 2483, 2490, 2491, 86, 86,
2230
2231 2487, 86, 86, 86, 2494, 86, 2485, 2495, 86, 2496,
2232 2497, 2500, 2499, 2498, 2571, 2501, 2486, 2488, 2492, 86,
2233 86, 2489, 86, 2490, 2491, 86, 2503, 2504, 2502, 2505,
2234 3136, 86, 2506, 86, 86, 86, 2507, 2497, 2500, 2499,
2235 2498, 86, 2501, 2508, 2509, 2511, 86, 2513, 86, 3136,
2236 2510, 86, 86, 2503, 2504, 2502, 86, 86, 86, 2506,
2237 86, 2512, 86, 86, 2518, 2517, 2514, 2515, 86, 86,
2238 2508, 2509, 2511, 86, 2513, 86, 2516, 2510, 2519, 2521,
2239 2525, 2522, 3136, 86, 2523, 2526, 2520, 2524, 2512, 86,
2240 86, 86, 2517, 2514, 2515, 86, 86, 2527, 2530, 86,
2241
2242 2532, 2534, 2531, 2516, 86, 2519, 86, 86, 2522, 86,
2243 86, 2523, 2526, 2520, 2524, 2528, 2529, 86, 86, 2536,
2244 2538, 2533, 86, 86, 2527, 86, 2535, 2532, 86, 2531,
2245 2537, 2541, 3136, 2542, 86, 2543, 2540, 2544, 86, 2539,
2246 86, 2545, 2528, 2529, 86, 3136, 86, 2538, 2533, 2547,
2247 86, 86, 86, 2535, 2548, 86, 2546, 2537, 86, 86,
2248 2542, 2549, 2543, 2540, 86, 2550, 2539, 86, 2545, 2551,
2249 86, 2552, 86, 2553, 2554, 2555, 2547, 86, 2557, 2560,
2250 2556, 2548, 2561, 2546, 3136, 2558, 86, 86, 86, 2559,
2251 2564, 86, 2550, 86, 2565, 86, 86, 86, 2552, 86,
2252
2253 2553, 2554, 2555, 86, 86, 2557, 2560, 2556, 86, 2561,
2254 2562, 2563, 2558, 2566, 2567, 3136, 2559, 86, 2569, 2570,
2255 2568, 86, 2572, 86, 2573, 2576, 2575, 86, 86, 2577,
2256 2579, 2574, 86, 2586, 86, 2580, 3136, 2562, 2563, 2583,
2257 167, 2567, 86, 86, 86, 2569, 2570, 2568, 86, 2572,
2258 86, 2573, 86, 2575, 2578, 2581, 86, 86, 2574, 86,
2259 2582, 86, 2580, 2584, 2585, 86, 2583, 2588, 86, 2587,
2260 2589, 2590, 2592, 2593, 2591, 2594, 2598, 86, 86, 3136,
2261 3136, 2578, 2595, 86, 2597, 86, 2600, 86, 86, 86,
2262 2584, 2585, 86, 86, 2588, 2596, 2587, 2589, 2590, 2592,
2263
2264 86, 2591, 2599, 2598, 86, 86, 86, 86, 86, 2595,
2265 86, 2597, 2601, 2600, 2602, 2604, 2603, 86, 2605, 3136,
2266 2606, 2609, 2596, 86, 2608, 2611, 2607, 2610, 86, 2599,
2267 86, 2615, 86, 86, 86, 86, 86, 2613, 2614, 2601,
2268 3136, 2602, 2604, 2603, 86, 2605, 86, 2606, 2609, 2612,
2269 86, 2608, 86, 2607, 2610, 86, 2617, 86, 86, 2616,
2270 2620, 2619, 2618, 2622, 2613, 2614, 2623, 86, 86, 86,
2271 2621, 2624, 86, 2625, 2626, 3136, 2612, 2627, 2628, 2630,
2272 2629, 3136, 2634, 2617, 86, 2633, 2616, 86, 2619, 2618,
2273 2635, 86, 2636, 86, 86, 86, 86, 2621, 86, 86,
2274
2275 86, 2626, 86, 86, 2627, 2628, 2630, 2629, 2631, 2634,
2276 2632, 86, 2633, 2637, 2639, 2638, 2640, 86, 2641, 86,
2277 2646, 86, 86, 2644, 2642, 86, 2647, 86, 2645, 2643,
2278 2648, 2649, 3136, 3136, 2651, 2631, 86, 2632, 86, 2650,
2279 86, 2639, 2638, 86, 86, 2641, 86, 2646, 86, 2654,
2280 2652, 2642, 86, 2647, 2655, 86, 2643, 86, 86, 86,
2281 2653, 2651, 2656, 86, 2658, 2659, 2650, 86, 2662, 2660,
2282 2657, 2661, 2663, 3136, 3136, 2671, 86, 2652, 86, 86,
2283 86, 2655, 86, 2664, 86, 2665, 2668, 2653, 2669, 86,
2284 2666, 86, 2659, 86, 2674, 86, 2660, 2657, 2661, 86,
2285
2286 86, 2667, 2670, 2673, 3136, 86, 86, 86, 2676, 2672,
2287 2664, 86, 2675, 2668, 2677, 2669, 2678, 86, 86, 2680,
2288 2679, 86, 3136, 86, 2686, 2687, 86, 86, 2667, 2670,
2289 2673, 2683, 2681, 2682, 86, 2676, 2672, 86, 86, 2675,
2290 2684, 2677, 86, 2678, 86, 86, 2680, 2679, 2685, 86,
2291 2688, 2686, 86, 86, 2689, 86, 2691, 2692, 2683, 2681,
2292 2682, 2693, 2690, 86, 2696, 86, 2694, 2684, 2697, 86,
2293 2698, 2695, 86, 2699, 2702, 2685, 2700, 2688, 86, 2701,
2294 86, 2689, 2703, 2691, 2692, 86, 2704, 2707, 2693, 2690,
2295 2709, 2696, 2706, 86, 86, 86, 86, 2698, 86, 86,
2296
2297 2699, 2702, 86, 2700, 86, 86, 2701, 2705, 86, 2703,
2298 86, 2708, 2710, 2704, 2707, 2711, 2712, 86, 86, 2706,
2299 2713, 2714, 2715, 2716, 86, 2721, 2720, 2717, 2718, 3136,
2300 3136, 3136, 3136, 2719, 2705, 86, 86, 3136, 2708, 2710,
2301 86, 2722, 2711, 86, 86, 86, 86, 2713, 86, 2715,
2302 86, 86, 86, 2720, 2717, 2718, 2723, 2724, 2725, 2727,
2303 2719, 2728, 2729, 2726, 86, 2730, 2731, 2732, 2722, 86,
2304 2734, 2735, 86, 86, 86, 2741, 3136, 2736, 2733, 86,
2305 86, 2737, 2739, 2723, 2724, 86, 2727, 86, 2728, 2729,
2306 86, 86, 2730, 86, 86, 86, 86, 2734, 2735, 2738,
2307
2308 86, 86, 2742, 2740, 2736, 2733, 2743, 86, 2737, 2739,
2309 86, 2746, 86, 2744, 2745, 3136, 2747, 86, 2749, 2751,
2310 2748, 2750, 2752, 2753, 2755, 3136, 2738, 3136, 3136, 2742,
2311 2740, 86, 2757, 2743, 86, 86, 86, 86, 2746, 2754,
2312 2744, 2745, 86, 2747, 86, 2749, 86, 2748, 2750, 86,
2313 86, 2755, 2756, 2758, 86, 2759, 2760, 86, 3136, 2757,
2314 86, 2761, 2762, 2764, 2765, 2763, 2754, 2766, 2767, 86,
2315 2768, 86, 86, 3136, 2769, 2770, 86, 86, 86, 2756,
2316 86, 2771, 2759, 2760, 2772, 86, 86, 2773, 86, 2762,
2317 2764, 2765, 2763, 2775, 2766, 2777, 2774, 2768, 86, 2781,
2318
2319 86, 86, 2770, 86, 86, 86, 86, 2778, 2771, 2776,
2320 2779, 2772, 2780, 86, 2773, 2787, 86, 86, 2782, 2783,
2321 2775, 86, 86, 2774, 86, 2784, 2781, 86, 2785, 86,
2322 2786, 86, 2788, 2789, 2778, 86, 2776, 2779, 2790, 2780,
2323 86, 2791, 86, 2792, 86, 2782, 2783, 86, 2797, 2796,
2324 86, 2793, 2784, 2794, 2798, 2785, 2795, 2786, 2800, 2788,
2325 86, 86, 86, 2801, 86, 86, 86, 86, 2791, 2799,
2326 86, 86, 2804, 86, 2802, 86, 2796, 2806, 2793, 2805,
2327 2794, 2798, 2817, 2795, 2803, 2800, 86, 86, 2807, 86,
2328 2801, 2809, 86, 2808, 2810, 2811, 2799, 2812, 86, 86,
2329
2330 2816, 2802, 86, 2814, 2818, 2815, 2805, 86, 2821, 86,
2331 86, 2803, 86, 2819, 86, 2807, 2813, 2822, 86, 86,
2332 2808, 86, 2811, 86, 86, 2823, 2820, 2816, 86, 2825,
2333 2814, 2818, 2815, 86, 2824, 86, 86, 2826, 2827, 2828,
2334 2819, 86, 2829, 2813, 2822, 2830, 2831, 2835, 2832, 86,
2335 3136, 86, 2823, 2820, 86, 2833, 2825, 2838, 2841, 2834,
2336 86, 2824, 2843, 86, 3136, 86, 2828, 86, 86, 86,
2337 2836, 2837, 2830, 2831, 86, 86, 2839, 86, 2840, 86,
2338 86, 2842, 2833, 2845, 86, 2841, 2834, 86, 2844, 86,
2339 2846, 86, 2847, 2849, 2848, 86, 86, 2836, 2837, 2851,
2340
2341 2850, 86, 2852, 2839, 2853, 2840, 86, 2855, 2842, 2857,
2342 2845, 2854, 2861, 2858, 86, 2844, 86, 86, 86, 86,
2343 2849, 2848, 86, 2859, 2856, 2864, 86, 2850, 86, 86,
2344 2860, 86, 86, 86, 86, 2862, 2857, 2863, 2854, 86,
2345 2858, 2865, 2866, 86, 86, 2867, 2868, 2869, 86, 2870,
2346 2859, 2856, 2864, 86, 2871, 86, 86, 2860, 2872, 2874,
2347 2873, 2875, 2862, 2876, 2863, 2877, 3136, 2878, 86, 86,
2348 3136, 86, 86, 2868, 2869, 2879, 2870, 86, 86, 2882,
2349 2885, 86, 86, 2883, 86, 86, 2874, 2873, 2880, 2881,
2350 2876, 2884, 2877, 86, 86, 86, 86, 86, 86, 86,
2351
2352 2886, 86, 2879, 2893, 2887, 2889, 2882, 2885, 86, 86,
2353 2883, 86, 86, 2888, 86, 2880, 2881, 2890, 2884, 2894,
2354 86, 2895, 2896, 2891, 2892, 2897, 2901, 2886, 86, 86,
2355 2893, 2887, 2889, 86, 2898, 2899, 2902, 2903, 2900, 2904,
2356 2888, 86, 86, 86, 2890, 2905, 2894, 2912, 2895, 2896,
2357 2891, 2892, 86, 86, 2906, 2907, 86, 86, 2908, 2909,
2358 86, 2898, 2899, 86, 2903, 2900, 86, 2910, 2911, 3136,
2359 86, 2913, 86, 2914, 2912, 2915, 2919, 2916, 2917, 2918,
2360 2924, 2923, 86, 86, 86, 86, 2922, 86, 86, 2920,
2361 2921, 86, 86, 3136, 2926, 2928, 86, 2927, 86, 86,
2362
2363 2914, 86, 2915, 86, 2916, 2917, 2918, 2924, 2923, 86,
2364 86, 2925, 86, 2922, 2929, 2930, 2920, 2921, 2931, 2936,
2365 86, 2926, 86, 86, 2927, 2932, 2934, 86, 2933, 2939,
2366 2937, 2935, 86, 2943, 2938, 86, 2944, 2940, 2925, 3136,
2367 86, 86, 2930, 86, 2941, 2931, 86, 2946, 2945, 2947,
2368 2948, 86, 2932, 2949, 2942, 2933, 2939, 2937, 86, 86,
2369 86, 2938, 86, 2950, 2940, 2951, 86, 2952, 86, 86,
2370 2953, 2941, 86, 2954, 86, 2945, 86, 2948, 2955, 2956,
2371 86, 2942, 2958, 2957, 2959, 2963, 2961, 2962, 2960, 3136,
2372 86, 3136, 86, 86, 86, 86, 2964, 86, 2967, 2969,
2373
2374 86, 86, 86, 86, 2965, 86, 86, 2966, 86, 86,
2375 2957, 2959, 86, 2961, 2962, 2960, 2968, 2971, 86, 2973,
2376 2970, 2974, 86, 2964, 86, 2967, 86, 2975, 86, 86,
2377 86, 2965, 2972, 86, 2966, 2976, 2977, 3136, 2978, 2983,
2378 3136, 86, 2979, 2968, 2971, 86, 2973, 2970, 2974, 86,
2379 86, 86, 2980, 2981, 2975, 2982, 2984, 86, 2986, 2972,
2380 86, 86, 2985, 2977, 86, 2978, 2983, 86, 86, 2979,
2381 2987, 2988, 86, 2989, 2990, 2991, 86, 3136, 86, 2980,
2382 2981, 2992, 2982, 2984, 2993, 2986, 86, 2997, 2995, 2985,
2383 2994, 86, 86, 86, 2996, 2998, 3004, 86, 86, 3000,
2384
2385 86, 2990, 2991, 86, 86, 3001, 2999, 86, 2992, 86,
2386 86, 2993, 3136, 3007, 2997, 2995, 3002, 2994, 86, 86,
2387 86, 2996, 2998, 3004, 86, 86, 3000, 3003, 3005, 3006,
2388 86, 86, 3001, 2999, 3008, 3010, 86, 3011, 3009, 3012,
2389 3007, 86, 86, 3002, 86, 3014, 3013, 3016, 3018, 86,
2390 3015, 3019, 86, 86, 3003, 3005, 3006, 3017, 3022, 86,
2391 3021, 3008, 3010, 3020, 3011, 3009, 3012, 86, 86, 3023,
2392 3024, 86, 86, 3013, 86, 86, 3026, 3015, 86, 3025,
2393 3027, 86, 86, 86, 3017, 3022, 3028, 3021, 86, 3029,
2394 3020, 86, 86, 3030, 3031, 3032, 3023, 3024, 3033, 86,
2395
2396 3034, 86, 3035, 3026, 86, 3036, 3025, 3038, 86, 3037,
2397 86, 3039, 86, 3028, 3040, 86, 3029, 86, 86, 3042,
2398 3030, 3031, 86, 3041, 3043, 3033, 3044, 3034, 3045, 86,
2399 3047, 86, 3036, 86, 86, 3046, 3037, 86, 3039, 86,
2400 3048, 3040, 86, 86, 3049, 3053, 3052, 3055, 3050, 3136,
2401 3041, 86, 86, 3044, 86, 3045, 86, 3047, 3051, 86,
2402 3136, 3060, 3046, 3054, 3057, 86, 3058, 86, 86, 86,
2403 86, 86, 3053, 3052, 3055, 3050, 3056, 3061, 86, 3059,
2404 86, 3062, 3063, 86, 86, 3051, 3064, 86, 3060, 86,
2405 3054, 3057, 3065, 3058, 3066, 86, 3067, 3068, 3069, 86,
2406
2407 86, 3075, 3136, 3056, 3061, 3070, 3059, 3136, 86, 3063,
2408 3074, 3071, 3072, 3064, 3073, 3136, 3077, 3078, 86, 3065,
2409 3083, 86, 86, 3067, 86, 3069, 3076, 86, 86, 86,
2410 3080, 3087, 3070, 86, 86, 3085, 3136, 3079, 3071, 3072,
2411 86, 3073, 86, 86, 3078, 86, 3081, 3082, 86, 86,
2412 86, 3084, 86, 3076, 86, 86, 3086, 3080, 86, 86,
2413 3136, 3091, 3085, 3088, 3079, 3090, 3089, 3092, 3136, 86,
2414 3093, 3136, 3094, 3081, 3082, 86, 3098, 3096, 3084, 3095,
2415 3105, 86, 86, 3086, 86, 3097, 86, 86, 3091, 3100,
2416 3088, 86, 3090, 3089, 3092, 3101, 3102, 3093, 86, 3094,
2417
2418 3099, 86, 86, 3098, 3096, 3103, 3095, 86, 86, 3104,
2419 3107, 3106, 3097, 3108, 3109, 86, 3100, 86, 86, 3110,
2420 3111, 86, 3101, 3102, 3114, 86, 3112, 3099, 86, 3120,
2421 3136, 3121, 3103, 86, 86, 86, 3104, 3107, 3106, 86,
2422 86, 3109, 3113, 3116, 3115, 3117, 3110, 3111, 86, 3118,
2423 86, 86, 86, 3112, 3119, 86, 3120, 86, 86, 3124,
2424 3122, 3125, 86, 3126, 3127, 86, 3123, 86, 86, 3113,
2425 3116, 3115, 3117, 3128, 86, 3129, 3118, 3130, 3134, 3131,
2426 3135, 3119, 3136, 86, 3132, 86, 3124, 3122, 86, 3133,
2427 3126, 86, 86, 3123, 3136, 86, 3136, 86, 3136, 86,
2428
2429 86, 86, 3129, 3136, 3130, 86, 3131, 86, 3136, 3136,
2430 3136, 3132, 3136, 3136, 3136, 3136, 3133, 47, 47, 47,
2431 47, 47, 47, 47, 52, 52, 52, 52, 52, 52,
2432 52, 57, 57, 57, 57, 57, 57, 57, 63, 63,
2433 63, 63, 63, 63, 63, 68, 68, 68, 68, 68,
2434 68, 68, 74, 74, 74, 74, 74, 74, 74, 80,
2435 80, 80, 80, 80, 80, 80, 89, 89, 3136, 89,
2436 89, 89, 89, 157, 157, 3136, 3136, 3136, 157, 157,
2437 159, 159, 3136, 3136, 159, 3136, 159, 161, 3136, 3136,
2438 3136, 3136, 3136, 161, 164, 164, 3136, 3136, 3136, 164,
2439
2440 164, 166, 3136, 3136, 3136, 3136, 3136, 166, 168, 168,
2441 3136, 168, 168, 168, 168, 171, 3136, 3136, 3136, 3136,
2442 3136, 171, 174, 174, 3136, 3136, 3136, 174, 174, 90,
2443 90, 3136, 90, 90, 90, 90, 17, 3136, 3136, 3136,
2444 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
2445 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
2446 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
2447 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
2448 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
2449 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
2450
2451 3136, 3136, 3136
23502452 } ;
23512453
2352 static const flex_int16_t yy_chk[8542] =
2454 static const flex_int16_t yy_chk[9004] =
23532455 { 0,
23542456 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
23552457 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
23582460 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
23592461 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
23602462 1, 1, 1, 1, 1, 1, 3, 3, 3, 4,
2361 4, 4, 5, 5, 6, 6, 5, 28, 6, 7,
2362 7, 7, 7, 2991, 7, 8, 8, 8, 8, 28,
2363 8, 9, 9, 9, 10, 10, 10, 15, 21, 24,
2364
2365 999, 15, 30, 3, 28, 150, 4, 47, 47, 5,
2366 19, 6, 19, 19, 30, 19, 72, 7, 148, 24,
2367 72, 19, 24, 8, 21, 21, 24, 29, 9, 30,
2368 25, 10, 11, 11, 11, 11, 11, 11, 12, 12,
2369 12, 12, 12, 12, 25, 33, 24, 35, 19, 29,
2370 52, 33, 11, 52, 29, 22, 25, 25, 12, 147,
2371 35, 145, 22, 63, 63, 26, 22, 142, 142, 22,
2372 11, 25, 33, 26, 35, 77, 12, 143, 78, 11,
2373 31, 22, 22, 265, 82, 12, 20, 20, 31, 22,
2374 20, 26, 26, 22, 31, 20, 22, 41, 31, 77,
2375
2376 26, 78, 77, 68, 20, 78, 31, 31, 82, 41,
2377 20, 82, 265, 20, 20, 31, 68, 20, 79, 141,
2378 81, 31, 20, 27, 41, 31, 27, 81, 80, 1103,
2379 68, 20, 23, 27, 144, 27, 23, 144, 79, 23,
2380 70, 23, 23, 80, 32, 79, 27, 81, 32, 126,
2381 27, 109, 84, 27, 23, 80, 38, 1103, 38, 23,
2382 27, 84, 27, 23, 32, 109, 23, 38, 23, 23,
2383 32, 32, 40, 38, 39, 32, 40, 85, 109, 84,
2384 40, 126, 38, 38, 39, 38, 122, 122, 39, 39,
2385 862, 32, 34, 86, 38, 85, 34, 39, 40, 40,
2386
2387 38, 39, 34, 40, 85, 34, 86, 40, 88, 88,
2388 90, 39, 34, 122, 34, 39, 39, 88, 90, 34,
2389 86, 862, 42, 34, 42, 42, 89, 42, 156, 34,
2390 64, 89, 34, 42, 59, 88, 88, 90, 83, 34,
2391 36, 97, 156, 58, 36, 58, 58, 69, 58, 69,
2392 69, 83, 69, 89, 36, 36, 66, 36, 66, 66,
2393 156, 66, 83, 54, 97, 83, 36, 36, 97, 156,
2394 95, 36, 71, 91, 71, 71, 53, 71, 83, 95,
2395 48, 36, 36, 71, 36, 37, 107, 74, 37, 74,
2396 74, 91, 74, 92, 66, 37, 87, 95, 74, 37,
2397
2398 37, 93, 87, 99, 87, 91, 92, 37, 93, 107,
2399 96, 101, 37, 107, 98, 37, 99, 87, 91, 96,
2400 92, 43, 37, 87, 207, 74, 37, 37, 93, 87,
2401 99, 87, 94, 94, 106, 101, 98, 96, 102, 100,
2402 94, 98, 100, 101, 105, 207, 102, 106, 94, 105,
2403 103, 207, 105, 108, 104, 100, 100, 14, 104, 94,
2404 94, 106, 101, 100, 110, 102, 100, 94, 238, 100,
2405 103, 105, 103, 108, 104, 111, 105, 103, 104, 112,
2406 108, 104, 100, 100, 110, 104, 112, 113, 114, 111,
2407 115, 110, 118, 117, 116, 238, 113, 103, 116, 115,
2408
2409 117, 104, 111, 119, 149, 149, 112, 13, 0, 0,
2410 119, 114, 121, 120, 113, 114, 116, 115, 118, 118,
2411 117, 116, 120, 123, 121, 116, 127, 124, 120, 125,
2412 119, 123, 146, 0, 146, 146, 120, 146, 124, 121,
2413 120, 127, 124, 125, 128, 0, 129, 130, 133, 120,
2414 123, 124, 131, 127, 124, 120, 125, 129, 130, 133,
2415 131, 128, 132, 135, 128, 124, 129, 137, 132, 124,
2416 128, 128, 134, 129, 130, 133, 136, 138, 135, 131,
2417 139, 134, 137, 140, 129, 0, 138, 0, 128, 132,
2418 135, 128, 0, 134, 137, 154, 140, 134, 136, 134,
2419
2420 0, 155, 139, 136, 138, 161, 171, 139, 134, 151,
2421 140, 151, 151, 152, 151, 152, 152, 157, 152, 154,
2422 134, 158, 154, 155, 161, 160, 157, 159, 155, 162,
2423 163, 164, 161, 158, 159, 0, 165, 162, 171, 167,
2424 170, 160, 163, 165, 157, 167, 159, 166, 158, 174,
2425 991, 152, 160, 164, 159, 169, 162, 163, 164, 176,
2426 168, 159, 168, 165, 172, 166, 170, 170, 172, 177,
2427 175, 167, 167, 178, 166, 174, 174, 169, 175, 180,
2428 991, 176, 169, 179, 0, 172, 176, 168, 178, 0,
2429 179, 177, 172, 181, 0, 172, 177, 175, 0, 182,
2430
2431 178, 183, 0, 193, 0, 184, 186, 180, 0, 0,
2432 179, 180, 172, 173, 183, 186, 181, 184, 173, 187,
2433 181, 182, 185, 173, 0, 185, 182, 0, 183, 173,
2434 173, 188, 184, 186, 180, 193, 173, 185, 190, 0,
2435 173, 187, 189, 192, 191, 173, 187, 189, 196, 185,
2436 173, 191, 185, 188, 192, 194, 173, 173, 188, 189,
2437 190, 189, 195, 198, 199, 190, 201, 0, 189, 189,
2438 192, 191, 197, 195, 189, 202, 203, 200, 199, 197,
2439 196, 194, 194, 200, 204, 0, 189, 205, 189, 0,
2440 209, 0, 206, 211, 195, 198, 199, 202, 201, 197,
2441
2442 195, 212, 202, 208, 200, 199, 206, 205, 203, 213,
2443 208, 209, 211, 210, 205, 212, 204, 209, 210, 206,
2444 211, 214, 215, 219, 216, 217, 223, 225, 212, 0,
2445 208, 213, 217, 218, 215, 216, 213, 220, 218, 214,
2446 210, 230, 222, 221, 231, 219, 220, 222, 214, 215,
2447 219, 216, 217, 224, 224, 227, 226, 232, 223, 225,
2448 228, 230, 224, 226, 220, 218, 221, 229, 230, 222,
2449 221, 233, 234, 235, 239, 229, 231, 227, 236, 233,
2450 224, 224, 227, 226, 237, 228, 240, 228, 235, 232,
2451 241, 236, 242, 244, 229, 245, 242, 239, 233, 243,
2452
2453 235, 250, 0, 245, 234, 236, 239, 241, 244, 246,
2454 237, 237, 251, 248, 254, 241, 247, 241, 240, 242,
2455 244, 243, 245, 247, 239, 249, 243, 252, 246, 249,
2456 255, 253, 256, 250, 241, 248, 246, 258, 257, 261,
2457 248, 259, 255, 247, 251, 256, 254, 257, 262, 252,
2458 258, 263, 249, 253, 252, 264, 269, 255, 253, 256,
2459 259, 260, 270, 260, 258, 257, 267, 269, 259, 268,
2460 266, 261, 262, 273, 270, 262, 263, 271, 263, 266,
2461 272, 264, 264, 269, 274, 275, 276, 278, 260, 270,
2462 277, 273, 267, 267, 280, 268, 268, 266, 275, 282,
2463
2464 273, 271, 281, 272, 271, 279, 283, 272, 287, 0,
2465 0, 286, 275, 283, 284, 277, 274, 277, 276, 278,
2466 280, 280, 279, 284, 281, 286, 288, 296, 279, 281,
2467 285, 282, 279, 283, 287, 287, 285, 289, 286, 290,
2468 295, 284, 291, 0, 292, 293, 289, 300, 298, 279,
2469 288, 291, 297, 288, 293, 295, 294, 285, 0, 296,
2470 302, 304, 290, 298, 289, 300, 290, 295, 301, 291,
2471 292, 292, 293, 294, 300, 298, 297, 301, 305, 297,
2472 294, 306, 302, 294, 0, 304, 0, 302, 304, 303,
2473 309, 303, 305, 0, 308, 301, 306, 307, 307, 308,
2474
2475 294, 299, 314, 0, 299, 305, 0, 303, 306, 299,
2476 299, 299, 299, 303, 309, 311, 303, 309, 303, 299,
2477 310, 315, 307, 310, 307, 307, 308, 311, 299, 314,
2478 310, 299, 316, 312, 303, 313, 299, 299, 299, 299,
2479 317, 318, 311, 315, 0, 323, 319, 310, 315, 320,
2480 310, 312, 317, 313, 322, 0, 328, 320, 316, 316,
2481 312, 319, 313, 318, 321, 327, 322, 317, 318, 0,
2482 0, 321, 324, 319, 324, 326, 320, 323, 329, 0,
2483 332, 322, 326, 324, 330, 334, 337, 327, 328, 335,
2484 330, 321, 327, 332, 331, 0, 331, 336, 324, 324,
2485
2486 329, 324, 326, 334, 338, 329, 330, 332, 0, 333,
2487 324, 330, 334, 337, 339, 335, 335, 330, 331, 406,
2488 339, 331, 333, 331, 339, 333, 338, 333, 341, 336,
2489 343, 338, 339, 333, 342, 341, 333, 345, 339, 0,
2490 342, 339, 343, 0, 344, 348, 406, 339, 0, 333,
2491 345, 339, 333, 359, 333, 341, 344, 343, 348, 339,
2492 340, 342, 340, 351, 345, 350, 357, 347, 352, 0,
2493 354, 344, 348, 352, 353, 340, 354, 350, 340, 0,
2494 340, 351, 340, 347, 357, 359, 340, 340, 355, 340,
2495 351, 347, 350, 357, 347, 353, 355, 354, 379, 379,
2496
2497 352, 353, 340, 0, 356, 340, 358, 340, 0, 340,
2498 347, 349, 349, 361, 358, 355, 356, 360, 360, 362,
2499 361, 349, 365, 349, 349, 349, 363, 379, 349, 365,
2500 364, 356, 362, 358, 364, 363, 349, 368, 349, 349,
2501 361, 367, 0, 370, 360, 375, 362, 366, 349, 365,
2502 349, 349, 349, 367, 366, 349, 371, 364, 363, 368,
2503 369, 373, 363, 372, 368, 374, 0, 376, 367, 376,
2504 372, 378, 369, 377, 366, 370, 373, 375, 374, 380,
2505 381, 385, 371, 371, 377, 382, 380, 369, 373, 383,
2506 372, 381, 374, 378, 376, 384, 382, 387, 378, 0,
2507
2508 377, 388, 383, 386, 385, 389, 380, 381, 385, 388,
2509 390, 394, 382, 384, 392, 398, 383, 389, 386, 410,
2510 384, 390, 384, 387, 387, 391, 386, 392, 388, 394,
2511 386, 393, 389, 395, 391, 397, 396, 390, 394, 402,
2512 384, 392, 393, 400, 393, 386, 0, 398, 399, 393,
2513 401, 410, 391, 397, 399, 395, 404, 407, 393, 396,
2514 395, 402, 397, 396, 400, 403, 402, 405, 411, 393,
2515 400, 393, 403, 401, 408, 399, 409, 401, 412, 407,
2516 413, 405, 404, 404, 407, 417, 413, 414, 408, 415,
2517 412, 411, 403, 424, 405, 411, 416, 421, 420, 418,
2518
2519 417, 408, 409, 409, 416, 412, 418, 413, 419, 414,
2520 422, 415, 417, 420, 414, 423, 415, 419, 425, 424,
2521 424, 421, 416, 416, 421, 420, 418, 427, 426, 432,
2522 423, 416, 430, 422, 426, 419, 428, 422, 431, 433,
2523 425, 428, 423, 434, 431, 425, 435, 440, 432, 442,
2524 434, 446, 0, 427, 427, 426, 432, 433, 430, 430,
2525 437, 435, 437, 428, 438, 431, 433, 439, 441, 437,
2526 434, 438, 444, 435, 443, 446, 448, 0, 446, 440,
2527 439, 442, 449, 451, 447, 444, 441, 437, 448, 437,
2528 445, 438, 452, 445, 439, 441, 443, 447, 450, 444,
2529
2530 453, 443, 456, 448, 454, 450, 458, 451, 456, 445,
2531 451, 447, 457, 453, 449, 452, 455, 445, 459, 460,
2532 445, 455, 463, 461, 452, 450, 454, 453, 458, 456,
2533 459, 454, 462, 458, 461, 457, 463, 466, 0, 457,
2534 462, 460, 452, 455, 466, 459, 460, 468, 0, 463,
2535 461, 0, 0, 469, 467, 474, 498, 470, 0, 462,
2536 464, 469, 0, 0, 466, 464, 467, 464, 470, 481,
2537 468, 473, 471, 464, 468, 464, 481, 474, 464, 464,
2538 469, 467, 474, 473, 470, 464, 464, 464, 498, 472,
2539 475, 476, 464, 472, 464, 471, 481, 477, 473, 471,
2540
2541 464, 475, 464, 478, 479, 464, 464, 477, 0, 476,
2542 482, 472, 464, 484, 478, 480, 472, 475, 476, 480,
2543 472, 483, 490, 483, 0, 491, 485, 488, 479, 477,
2544 478, 479, 486, 487, 477, 488, 482, 482, 485, 484,
2545 484, 489, 480, 491, 490, 487, 489, 486, 483, 490,
2546 492, 493, 491, 485, 488, 494, 496, 497, 492, 486,
2547 487, 500, 501, 493, 499, 510, 504, 505, 489, 503,
2548 501, 509, 502, 500, 496, 504, 494, 492, 493, 499,
2549 497, 503, 494, 496, 497, 502, 506, 507, 500, 501,
2550 505, 499, 508, 504, 505, 511, 503, 510, 509, 502,
2551
2552 506, 512, 513, 514, 516, 515, 0, 0, 525, 523,
2553 511, 508, 507, 506, 507, 517, 516, 513, 515, 508,
2554 518, 521, 511, 520, 524, 522, 521, 514, 519, 513,
2555 514, 516, 515, 512, 520, 519, 523, 517, 519, 522,
2556 525, 526, 517, 527, 518, 528, 519, 518, 529, 530,
2557 520, 524, 522, 521, 529, 519, 531, 534, 532, 0,
2558 533, 537, 519, 536, 535, 519, 532, 536, 526, 537,
2559 527, 538, 539, 530, 540, 529, 530, 528, 531, 533,
2560 541, 534, 0, 531, 534, 532, 535, 533, 537, 541,
2561 536, 535, 542, 543, 538, 544, 545, 540, 538, 546,
2562
2563 543, 540, 549, 0, 539, 0, 547, 541, 548, 551,
2564 552, 547, 546, 550, 542, 547, 0, 548, 545, 542,
2565 543, 553, 550, 545, 556, 557, 546, 544, 549, 549,
2566 547, 551, 552, 547, 553, 548, 551, 552, 547, 554,
2567 550, 558, 547, 557, 563, 560, 0, 559, 553, 561,
2568 564, 554, 557, 562, 568, 563, 556, 569, 565, 564,
2569 567, 568, 0, 575, 0, 558, 554, 560, 558, 559,
2570 559, 563, 560, 561, 559, 562, 561, 564, 565, 566,
2571 562, 568, 567, 570, 569, 565, 571, 567, 572, 573,
2572 574, 576, 580, 566, 571, 575, 559, 577, 579, 572,
2573
2574 581, 570, 578, 578, 583, 574, 566, 573, 584, 581,
2575 570, 585, 576, 571, 580, 572, 573, 574, 576, 580,
2576 582, 577, 579, 588, 577, 579, 586, 581, 588, 587,
2577 584, 578, 589, 582, 590, 584, 583, 591, 591, 592,
2578 594, 593, 0, 585, 600, 591, 589, 582, 590, 593,
2579 586, 587, 595, 586, 597, 588, 587, 598, 594, 589,
2580 0, 590, 596, 599, 591, 591, 602, 594, 593, 596,
2581 601, 592, 604, 605, 595, 605, 600, 598, 599, 595,
2582 597, 597, 606, 608, 598, 601, 603, 599, 602, 596,
2583 599, 603, 609, 602, 607, 610, 614, 601, 604, 604,
2584
2585 605, 609, 607, 611, 610, 599, 612, 606, 608, 606,
2586 608, 615, 611, 613, 612, 617, 619, 616, 603, 609,
2587 613, 607, 610, 620, 618, 619, 621, 617, 614, 623,
2588 611, 620, 624, 612, 615, 616, 618, 622, 615, 625,
2589 613, 621, 617, 619, 616, 624, 628, 626, 627, 622,
2590 620, 618, 630, 621, 625, 626, 627, 633, 629, 624,
2591 636, 623, 631, 630, 622, 633, 625, 629, 634, 628,
2592 635, 631, 637, 628, 626, 627, 638, 632, 632, 630,
2593 637, 634, 641, 636, 633, 629, 632, 636, 639, 631,
2594 640, 644, 638, 641, 642, 634, 635, 635, 645, 637,
2595
2596 643, 639, 642, 638, 632, 632, 646, 647, 648, 641,
2597 649, 644, 640, 651, 643, 639, 650, 640, 644, 649,
2598 645, 642, 655, 654, 653, 645, 646, 643, 652, 647,
2599 648, 651, 656, 646, 647, 648, 650, 649, 654, 657,
2600 651, 652, 653, 650, 655, 658, 659, 662, 660, 655,
2601 654, 653, 661, 662, 663, 652, 656, 665, 658, 656,
2602 660, 664, 657, 668, 659, 661, 657, 666, 669, 664,
2603 670, 668, 658, 659, 662, 660, 671, 670, 672, 661,
2604 673, 663, 673, 674, 665, 666, 675, 664, 664, 676,
2605 668, 0, 674, 672, 666, 677, 664, 670, 699, 671,
2606
2607 669, 683, 678, 671, 679, 672, 679, 673, 676, 689,
2608 674, 678, 680, 683, 686, 677, 676, 0, 675, 680,
2609 0, 690, 677, 691, 686, 693, 692, 689, 683, 678,
2610 699, 679, 694, 701, 691, 0, 689, 696, 0, 680,
2611 681, 686, 690, 697, 681, 695, 696, 681, 690, 692,
2612 691, 693, 693, 692, 681, 701, 697, 681, 694, 694,
2613 701, 695, 681, 702, 696, 705, 698, 681, 0, 702,
2614 697, 681, 695, 698, 681, 704, 703, 704, 0, 706,
2615 0, 681, 708, 0, 681, 703, 709, 707, 711, 705,
2616 702, 710, 705, 698, 700, 700, 0, 700, 709, 712,
2617
2618 700, 715, 704, 703, 714, 700, 706, 707, 708, 708,
2619 711, 700, 700, 709, 707, 711, 715, 710, 710, 713,
2620 700, 700, 700, 712, 700, 716, 712, 700, 715, 714,
2621 717, 714, 700, 716, 721, 718, 719, 720, 700, 700,
2622 724, 713, 718, 722, 719, 723, 713, 728, 730, 729,
2623 725, 0, 716, 717, 726, 722, 720, 717, 723, 725,
2624 721, 721, 718, 719, 720, 733, 724, 724, 727, 726,
2625 722, 729, 723, 727, 734, 730, 729, 725, 731, 728,
2626 735, 726, 736, 731, 737, 0, 739, 733, 0, 0,
2627 738, 741, 733, 742, 744, 727, 740, 0, 0, 748,
2628
2629 743, 751, 745, 744, 736, 746, 734, 739, 0, 736,
2630 731, 0, 735, 739, 738, 740, 737, 738, 741, 743,
2631 742, 744, 747, 740, 745, 746, 748, 743, 749, 745,
2632 747, 750, 746, 751, 752, 754, 755, 756, 757, 0,
2633 764, 0, 752, 758, 759, 764, 749, 760, 0, 747,
2634 750, 762, 0, 754, 755, 749, 757, 765, 750, 756,
2635 760, 752, 754, 755, 756, 757, 759, 758, 763, 762,
2636 758, 759, 764, 761, 760, 761, 766, 767, 762, 768,
2637 772, 773, 763, 765, 765, 767, 769, 0, 766, 769,
2638 770, 0, 0, 774, 775, 763, 776, 768, 770, 774,
2639
2640 761, 0, 776, 766, 767, 772, 768, 772, 773, 781,
2641 779, 777, 778, 769, 770, 779, 775, 770, 777, 778,
2642 774, 775, 780, 776, 782, 770, 0, 781, 782, 780,
2643 783, 784, 786, 785, 787, 788, 781, 779, 777, 778,
2644 784, 785, 790, 792, 791, 793, 789, 794, 0, 780,
2645 788, 782, 787, 783, 789, 790, 792, 783, 784, 795,
2646 785, 787, 788, 796, 786, 791, 795, 793, 797, 790,
2647 792, 791, 793, 789, 794, 797, 799, 798, 802, 800,
2648 801, 796, 803, 799, 800, 802, 795, 805, 801, 804,
2649 796, 806, 807, 808, 809, 797, 798, 815, 806, 0,
2650
2651 810, 817, 804, 799, 798, 802, 800, 801, 810, 812,
2652 817, 814, 819, 821, 803, 811, 804, 809, 806, 805,
2653 813, 809, 816, 811, 807, 808, 813, 810, 817, 815,
2654 811, 812, 820, 823, 818, 824, 812, 814, 814, 820,
2655 821, 825, 811, 822, 819, 827, 816, 813, 818, 816,
2656 811, 826, 822, 825, 830, 823, 0, 829, 828, 820,
2657 823, 818, 824, 828, 829, 831, 833, 834, 825, 833,
2658 822, 827, 827, 831, 826, 836, 830, 837, 826, 841,
2659 834, 830, 836, 837, 829, 828, 0, 0, 839, 840,
2660 842, 841, 831, 833, 834, 843, 849, 843, 844, 0,
2661
2662 0, 849, 836, 0, 837, 838, 841, 838, 845, 847,
2663 0, 838, 840, 838, 839, 839, 840, 842, 838, 851,
2664 845, 844, 843, 838, 846, 844, 848, 854, 849, 838,
2665 850, 847, 838, 0, 838, 845, 847, 846, 838, 848,
2666 838, 858, 851, 850, 852, 838, 851, 855, 853, 854,
2667 838, 846, 857, 848, 854, 856, 852, 850, 853, 859,
2668 855, 856, 858, 860, 863, 857, 861, 864, 858, 0,
2669 853, 852, 864, 865, 855, 853, 869, 866, 0, 857,
2670 872, 865, 856, 0, 868, 853, 866, 871, 870, 874,
2671 0, 859, 0, 861, 864, 860, 863, 881, 869, 868,
2672
2673 865, 870, 871, 869, 866, 867, 872, 872, 874, 875,
2674 867, 868, 867, 873, 871, 870, 874, 876, 867, 877,
2675 878, 0, 875, 867, 867, 876, 879, 877, 882, 881,
2676 867, 867, 867, 883, 884, 873, 875, 867, 885, 867,
2677 873, 883, 886, 891, 876, 867, 877, 878, 884, 879,
2678 867, 867, 882, 879, 887, 882, 888, 867, 889, 0,
2679 883, 884, 887, 893, 886, 894, 890, 896, 892, 886,
2680 885, 893, 895, 898, 888, 891, 889, 890, 899, 895,
2681 896, 887, 897, 888, 900, 889, 892, 894, 898, 897,
2682 893, 901, 894, 890, 896, 892, 899, 902, 903, 895,
2683
2684 898, 907, 900, 0, 905, 899, 908, 902, 909, 897,
2685 910, 900, 901, 908, 907, 905, 909, 911, 901, 913,
2686 912, 914, 0, 910, 902, 920, 911, 917, 907, 919,
2687 903, 905, 912, 908, 918, 909, 921, 910, 0, 925,
2688 923, 913, 925, 914, 911, 0, 913, 912, 914, 917,
2689 921, 923, 918, 924, 917, 919, 919, 920, 924, 926,
2690 927, 918, 930, 921, 928, 925, 925, 923, 929, 925,
2691 931, 928, 932, 927, 933, 934, 930, 929, 935, 0,
2692 0, 933, 931, 926, 936, 924, 926, 927, 939, 930,
2693 935, 928, 940, 946, 941, 929, 937, 931, 940, 943,
2694
2695 942, 933, 944, 945, 932, 935, 936, 934, 946, 937,
2696 943, 936, 939, 948, 950, 939, 941, 949, 951, 940,
2697 946, 941, 942, 937, 944, 945, 943, 942, 949, 944,
2698 945, 952, 955, 953, 948, 950, 954, 0, 956, 957,
2699 948, 950, 959, 960, 949, 954, 958, 961, 957, 959,
2700 951, 953, 962, 963, 958, 964, 955, 967, 952, 955,
2701 953, 961, 971, 954, 956, 956, 957, 960, 965, 959,
2702 960, 966, 969, 958, 961, 972, 970, 964, 973, 983,
2703 984, 969, 964, 970, 962, 963, 974, 976, 975, 967,
2704 965, 979, 977, 966, 971, 965, 976, 972, 966, 969,
2705
2706 978, 980, 972, 970, 974, 973, 975, 979, 981, 982,
2707 980, 983, 984, 974, 976, 975, 977, 982, 979, 977,
2708 985, 986, 987, 981, 978, 988, 989, 978, 980, 990,
2709 994, 992, 985, 988, 1007, 981, 982, 993, 994, 989,
2710 992, 998, 997, 986, 990, 1002, 1005, 985, 986, 987,
2711 997, 1001, 988, 989, 1000, 993, 990, 994, 992, 995,
2712 1002, 995, 1003, 1001, 993, 1004, 1007, 1000, 998, 997,
2713 1006, 1008, 1002, 1005, 1009, 1010, 0, 1006, 1001, 1015,
2714 1012, 1000, 1011, 1004, 1003, 1013, 995, 1016, 1014, 1003,
2715 0, 1015, 1004, 1012, 1021, 1016, 1009, 1006, 1013, 1017,
2716
2717 1010, 1009, 1010, 1008, 1011, 1018, 1015, 1012, 1019, 1011,
2718 1014, 1022, 1013, 1023, 1016, 1014, 1019, 1018, 1024, 1017,
2719 1025, 1021, 1023, 0, 1022, 1029, 1017, 1026, 1027, 1031,
2720 1024, 1030, 1018, 1032, 1026, 1019, 0, 1027, 1022, 1027,
2721 1023, 1025, 1027, 1033, 1035, 1024, 1032, 1025, 1034, 1031,
2722 1027, 1029, 1029, 1030, 1026, 1027, 1031, 1034, 1030, 1036,
2723 1032, 1038, 1035, 1039, 1027, 1037, 1027, 1033, 1040, 1027,
2724 1033, 1035, 1042, 1037, 1043, 1034, 1040, 1045, 1044, 1039,
2725 1046, 1036, 0, 1038, 1045, 1047, 1036, 0, 1038, 1051,
2726 1039, 1048, 1037, 1054, 1049, 1040, 1043, 1051, 1050, 1042,
2727
2728 1044, 1043, 1046, 1053, 1045, 1044, 1049, 1046, 1047, 1048,
2729 1050, 1052, 1047, 1054, 1055, 1053, 1051, 1057, 1048, 1056,
2730 1054, 1049, 1058, 1057, 1059, 1050, 1052, 1056, 1060, 1055,
2731 1053, 1058, 1061, 1065, 1063, 1062, 1068, 1066, 1052, 1061,
2732 1060, 1055, 1062, 1068, 1057, 1059, 1056, 1067, 1069, 1058,
2733 1066, 1059, 1063, 1070, 1079, 1060, 1075, 1128, 1073, 1061,
2734 1083, 1063, 1062, 1068, 1066, 1065, 1067, 1071, 1070, 1072,
2735 1069, 1073, 1071, 1074, 1067, 1069, 1077, 1072, 1097, 1078,
2736 1070, 1080, 1075, 1075, 1128, 1073, 1079, 1074, 0, 1081,
2737 1077, 1084, 1083, 0, 1082, 1085, 1072, 1078, 1086, 1071,
2738
2739 1074, 1076, 0, 1077, 1076, 1076, 1078, 1080, 1080, 1076,
2740 1097, 1081, 1082, 1084, 1087, 1076, 1081, 1085, 1084, 1076,
2741 1087, 1082, 1085, 1076, 1086, 1086, 1088, 1089, 1076, 1089,
2742 1090, 1076, 1076, 1094, 1091, 1095, 1076, 1090, 1093, 1098,
2743 1092, 1087, 1076, 1091, 0, 1093, 1076, 1099, 1095, 1100,
2744 1096, 1089, 1088, 1088, 1089, 1094, 1089, 1090, 1092, 1096,
2745 1094, 1091, 1095, 0, 1102, 1093, 1104, 1092, 1107, 1099,
2746 1108, 1098, 1100, 0, 1099, 1106, 1100, 1096, 1101, 1108,
2747 1107, 1109, 1104, 1101, 0, 1101, 1118, 1101, 0, 1101,
2748 1102, 1102, 0, 1104, 1113, 1107, 1101, 1108, 1106, 1109,
2749
2750 1112, 1110, 1106, 0, 1111, 1101, 1110, 1113, 1109, 1111,
2751 1101, 1114, 1101, 1117, 1101, 1115, 1101, 1116, 1118, 1119,
2752 1120, 1113, 1112, 1115, 1121, 1116, 1117, 1112, 1122, 1114,
2753 1123, 1111, 1125, 1110, 1124, 1130, 1127, 1121, 1114, 1120,
2754 1117, 1125, 1115, 1123, 1116, 1119, 1119, 1120, 1129, 1131,
2755 1122, 1121, 1124, 1133, 1126, 1122, 1126, 1123, 1127, 1125,
2756 1129, 1124, 1130, 1127, 1134, 1135, 1136, 1137, 1139, 0,
2757 1140, 1138, 1144, 1135, 1131, 1129, 1131, 1133, 1138, 1141,
2758 1133, 1126, 1142, 1143, 1136, 0, 1134, 1146, 1142, 1143,
2759 1149, 1134, 1135, 1136, 1137, 1139, 1140, 1140, 1138, 1144,
2760
2761 1145, 1141, 1148, 1150, 1151, 1147, 1141, 1145, 1149, 1142,
2762 1143, 1146, 1147, 1151, 1146, 1153, 1155, 1149, 1156, 0,
2763 0, 1154, 1157, 1163, 1148, 1158, 1162, 1145, 1150, 1148,
2764 1150, 1151, 1147, 1154, 1159, 1162, 1160, 1161, 1155, 1153,
2765 1156, 1157, 1153, 1155, 1163, 1156, 1164, 1158, 1154, 1157,
2766 1163, 1165, 1158, 1162, 1167, 1168, 1159, 1169, 1170, 1161,
2767 1179, 1159, 1160, 1160, 1161, 1165, 1164, 1171, 1172, 1174,
2768 1175, 1178, 1173, 1164, 1177, 1178, 1172, 1175, 1165, 1169,
2769 1180, 1177, 1181, 1183, 1169, 1171, 1167, 1168, 1173, 1187,
2770 1170, 1189, 1179, 1186, 1171, 1172, 1174, 1175, 1178, 1173,
2771
2772 1184, 1177, 1187, 1181, 1185, 1188, 1184, 0, 1186, 1181,
2773 1194, 1185, 1180, 1184, 1188, 1183, 1187, 1189, 1189, 1190,
2774 1186, 1191, 1193, 1191, 1195, 1192, 1190, 1184, 1195, 1200,
2775 0, 1185, 1188, 1184, 1192, 1196, 1199, 1194, 1200, 1198,
2776 1201, 1199, 1202, 1204, 1193, 0, 1190, 1198, 1191, 1193,
2777 1203, 1195, 1192, 1207, 1209, 1204, 1200, 1196, 1201, 0,
2778 1208, 1202, 1196, 1203, 0, 1210, 1198, 1201, 1199, 1202,
2779 1204, 1205, 1206, 1208, 1205, 1206, 1212, 1203, 1207, 1211,
2780 1207, 1213, 1213, 1205, 1212, 1215, 1209, 1208, 1210, 1217,
2781 1218, 1214, 1210, 1227, 1206, 1211, 1216, 1218, 1205, 1206,
2782
2783 1214, 1205, 1206, 1212, 1221, 1216, 1211, 1215, 1213, 1220,
2784 1222, 1217, 1215, 1221, 1223, 1224, 1217, 1218, 1214, 1222,
2785 1225, 0, 1220, 1216, 1226, 1227, 1229, 1231, 1228, 1225,
2786 0, 1221, 1226, 1230, 1229, 0, 1220, 1222, 1224, 1231,
2787 1223, 1223, 1224, 1228, 1232, 1234, 1230, 1225, 1235, 1233,
2788 1237, 1226, 1236, 1229, 1231, 1228, 1232, 1233, 1239, 1237,
2789 1230, 1240, 1238, 1242, 1244, 1241, 1245, 1234, 1235, 1242,
2790 1249, 1232, 1234, 1240, 1236, 1235, 1233, 1237, 1243, 1236,
2791 1238, 1246, 0, 1247, 1239, 1239, 1241, 0, 1240, 1238,
2792 1242, 1250, 1241, 1251, 1252, 1255, 1244, 1249, 1245, 1253,
2793
2794 1243, 1254, 1259, 1252, 1256, 1243, 1258, 1246, 1246, 1247,
2795 1247, 1251, 1253, 1254, 1250, 1255, 1257, 0, 1250, 1260,
2796 1251, 1252, 1255, 1257, 1259, 1258, 1253, 1261, 1254, 1259,
2797 1256, 1256, 1260, 1258, 1262, 1261, 1263, 1264, 1268, 1262,
2798 1266, 1263, 1267, 1257, 1264, 1265, 1260, 1270, 1266, 1272,
2799 1267, 1269, 1271, 1273, 1261, 1270, 1268, 1276, 1272, 1271,
2800 1274, 1275, 1275, 1278, 1264, 1268, 1262, 1266, 1263, 1267,
2801 0, 1265, 1265, 1269, 1270, 1277, 1272, 1279, 1269, 1271,
2802 1287, 0, 1274, 1277, 1278, 1273, 1280, 1274, 1275, 1276,
2803 1278, 1281, 1282, 1283, 1280, 1284, 1289, 1285, 1286, 1281,
2804
2805 1282, 1283, 1277, 1285, 1288, 1290, 1287, 1287, 1284, 1279,
2806 1286, 1289, 1291, 1280, 1292, 1293, 1295, 1294, 1281, 1282,
2807 1283, 1299, 1284, 1289, 1285, 1286, 1304, 1298, 1288, 1293,
2808 1295, 1288, 1290, 1299, 1291, 1294, 1296, 1292, 1300, 1291,
2809 1296, 1292, 1293, 1295, 1294, 1300, 1301, 1302, 1299, 1298,
2810 1303, 0, 1305, 1296, 1298, 1306, 1307, 1301, 1304, 1310,
2811 1313, 1296, 1308, 1296, 1305, 1300, 1310, 1296, 1309, 1306,
2812 1314, 0, 1303, 1301, 1302, 1311, 1319, 1303, 1307, 1305,
2813 1296, 1312, 1306, 1307, 1311, 1308, 1310, 1316, 1312, 1308,
2814 1320, 1309, 1313, 1318, 1321, 1309, 1316, 1314, 1319, 1318,
2815
2816 1322, 1324, 1311, 1319, 1327, 1326, 1331, 1322, 1312, 0,
2817 1328, 1329, 1332, 1335, 1316, 1334, 1320, 1320, 1333, 1332,
2818 1318, 1328, 1329, 0, 1338, 1335, 1321, 1322, 1324, 1326,
2819 1331, 1327, 1326, 1331, 1339, 1349, 1333, 1328, 1329, 1332,
2820 1335, 1334, 1334, 1336, 1337, 1333, 1338, 1339, 1340, 1336,
2821 1341, 1338, 1337, 1342, 1343, 1345, 1343, 1344, 1346, 1341,
2822 1348, 1339, 1349, 0, 1347, 1342, 1350, 1346, 1345, 1351,
2823 1336, 1337, 1348, 1352, 1340, 1340, 1351, 1341, 1354, 1355,
2824 1342, 1343, 1345, 1344, 1344, 1346, 1347, 1348, 1357, 1350,
2825 1353, 1347, 1359, 1350, 1354, 1353, 1351, 0, 1360, 1352,
2826
2827 1352, 1356, 1355, 1361, 1366, 1354, 1355, 1360, 1363, 1356,
2828 1357, 1365, 1362, 1362, 1369, 1357, 1361, 1353, 0, 1359,
2829 1362, 1363, 1364, 1370, 1364, 1360, 1366, 1367, 1356, 1368,
2830 1361, 1366, 1369, 1372, 1367, 1363, 1368, 1365, 1365, 1362,
2831 1362, 1369, 1373, 1374, 1371, 1370, 1375, 1376, 0, 1364,
2832 1370, 1371, 0, 1375, 1367, 1378, 1368, 1379, 1372, 1380,
2833 1372, 1385, 1381, 1383, 1373, 1386, 0, 1380, 1378, 1373,
2834 1391, 1371, 1388, 1375, 1384, 1374, 1390, 1384, 0, 1376,
2835 1387, 1388, 1378, 1381, 1379, 1383, 1380, 1385, 1385, 1381,
2836 1383, 1386, 1386, 1387, 1389, 1392, 1391, 1391, 1393, 1388,
2837
2838 1390, 1384, 1395, 1390, 1396, 1393, 1389, 1387, 1394, 1397,
2839 1392, 1394, 1399, 1401, 1399, 1398, 1400, 1405, 0, 1402,
2840 0, 1389, 1392, 1394, 0, 1393, 1396, 1397, 1403, 0,
2841 1404, 1396, 1394, 1407, 1395, 1394, 1397, 1398, 1394, 1399,
2842 1400, 1402, 1398, 1400, 1406, 1401, 1402, 1407, 1411, 1405,
2843 1394, 1409, 1408, 1418, 1403, 1403, 1404, 1404, 1410, 1409,
2844 1407, 1408, 1412, 1413, 1414, 1410, 1406, 1415, 0, 1416,
2845 1417, 1406, 1411, 1416, 1420, 1411, 1419, 1421, 1409, 1408,
2846 1418, 1422, 1433, 1420, 1421, 1410, 1414, 1423, 1422, 1424,
2847 1425, 1414, 1417, 1426, 1412, 1413, 1416, 1417, 1419, 1415,
2848
2849 1423, 1420, 1424, 1419, 1421, 1425, 1427, 1426, 1422, 1433,
2850 1430, 0, 1428, 1435, 1423, 1429, 1424, 1425, 1431, 1428,
2851 1426, 1434, 1429, 1430, 1431, 1436, 1441, 1440, 1434, 1437,
2852 1438, 1439, 0, 0, 1439, 1435, 1440, 1430, 1427, 1428,
2853 1435, 1437, 1429, 1438, 1441, 1431, 1443, 1442, 1434, 0,
2854 1445, 1436, 1436, 1441, 1440, 1450, 1437, 1438, 1439, 1442,
2855 1444, 1445, 1451, 1444, 1447, 1449, 1443, 1449, 1452, 1447,
2856 1453, 1454, 0, 1443, 1442, 1455, 1447, 1445, 1444, 1450,
2857 1454, 1456, 1450, 1459, 1460, 1453, 1457, 1444, 0, 1451,
2858 1444, 1447, 1449, 1458, 1467, 1452, 1447, 1453, 1454, 1455,
2859
2860 1457, 1458, 1455, 1462, 1461, 1459, 1460, 1463, 1456, 1464,
2861 1459, 1460, 1461, 1457, 1462, 1465, 1468, 1464, 1465, 1466,
2862 1458, 1469, 1472, 1471, 1470, 1463, 1467, 0, 1469, 1473,
2863 1462, 1461, 1471, 1465, 1463, 1472, 1464, 1466, 1470, 1474,
2864 1473, 1478, 1465, 1468, 1480, 1465, 1466, 1479, 1469, 1472,
2865 1471, 1470, 1477, 1476, 1474, 1476, 1473, 1483, 1479, 1481,
2866 1483, 1477, 1480, 1482, 1484, 0, 1474, 1478, 1478, 1486,
2867 1485, 1480, 1489, 1484, 1479, 1483, 1485, 1482, 1486, 1477,
2868 1476, 1481, 1490, 1487, 1483, 1489, 1481, 1483, 1487, 1482,
2869 1482, 1484, 1492, 1491, 1490, 1493, 1486, 1485, 1491, 1489,
2870
2871 1496, 1494, 1495, 1497, 1482, 1498, 0, 1508, 1502, 1490,
2872 1494, 1501, 1499, 1503, 1492, 1487, 1505, 1504, 1501, 1492,
2873 1491, 1502, 1505, 1506, 0, 1497, 1508, 1493, 1494, 1495,
2874 1497, 1504, 1496, 1499, 1508, 1502, 1531, 1498, 1501, 1499,
2875 1505, 1512, 1510, 1505, 1504, 1503, 1511, 1513, 1514, 1505,
2876 1510, 1516, 1515, 1519, 1511, 1506, 1518, 1517, 1520, 0,
2877 1512, 1526, 1514, 1531, 1516, 1513, 1515, 1521, 1512, 1510,
2878 1517, 1527, 1525, 1511, 1513, 1514, 1527, 1518, 1516, 1515,
2879 1522, 1521, 1523, 1518, 1517, 1519, 1525, 1522, 1524, 1528,
2880 1520, 1523, 1529, 1526, 1521, 1532, 1524, 1533, 1527, 1525,
2881
2882 1528, 1529, 1532, 1534, 1518, 1535, 1536, 1522, 1537, 1523,
2883 1538, 1540, 1541, 1542, 1538, 1524, 1528, 0, 1545, 1529,
2884 1533, 1542, 1532, 1540, 1533, 1534, 1537, 1535, 1536, 1543,
2885 1534, 1547, 1535, 1536, 1544, 1537, 1546, 1538, 1540, 1541,
2886 1542, 1551, 1544, 1552, 1543, 1545, 1550, 1548, 1551, 1546,
2887 1549, 1547, 1553, 1556, 1550, 1554, 1543, 1555, 1547, 1557,
2888 1558, 1544, 1548, 1546, 1554, 1549, 1560, 1553, 1551, 1562,
2889 1563, 1561, 1566, 1550, 1548, 1552, 1564, 1549, 1555, 1553,
2890 1556, 1565, 1554, 1557, 1555, 1567, 1557, 1558, 1560, 1561,
2891 1568, 1564, 1567, 1560, 1571, 1568, 1566, 1563, 1561, 1566,
2892
2893 1569, 1562, 1570, 1564, 1572, 1573, 1565, 1574, 1565, 1569,
2894 1576, 1570, 1567, 1575, 1578, 1579, 1571, 1568, 1577, 1574,
2895 1573, 1571, 1572, 1576, 1580, 1577, 1578, 1569, 1576, 1570,
2896 1581, 1572, 1573, 1583, 1574, 1575, 1581, 1576, 1582, 1585,
2897 1575, 1578, 1579, 1587, 1583, 1577, 1582, 1584, 1588, 1586,
2898 1576, 1586, 1589, 1591, 1584, 1592, 1580, 1581, 1595, 1597,
2899 1583, 1590, 1586, 1596, 1585, 1582, 1585, 1593, 1590, 1587,
2900 1587, 1594, 1598, 1593, 1584, 1588, 1586, 1594, 1586, 1589,
2901 1591, 1592, 1592, 1600, 1601, 1595, 1596, 1602, 1590, 1604,
2902 1596, 1597, 1607, 1601, 1593, 1603, 1598, 1603, 1594, 1598,
2903
2904 1605, 0, 1606, 1608, 1608, 1608, 1611, 1609, 1619, 0,
2905 1608, 1601, 1614, 1604, 1609, 1600, 1604, 1614, 1608, 1602,
2906 1616, 0, 1603, 1615, 1607, 1617, 1610, 1605, 1606, 1606,
2907 1608, 1608, 1608, 1610, 1609, 1612, 1615, 1608, 1611, 1618,
2908 1619, 1617, 1612, 1620, 1614, 1616, 1623, 1616, 1621, 1629,
2909 1615, 1618, 1617, 1610, 1622, 1621, 1624, 1624, 1625, 1633,
2910 1622, 1620, 1612, 1627, 1626, 1630, 1618, 1628, 1627, 1635,
2911 1620, 1626, 1630, 1623, 1639, 1621, 1629, 1634, 1640, 1634,
2912 1637, 1622, 1638, 1624, 1625, 1625, 1633, 1635, 1638, 1641,
2913 1627, 1626, 1630, 1628, 1628, 1641, 1635, 1643, 1637, 1642,
2914
2915 1644, 1645, 1645, 1646, 1634, 1640, 1639, 1637, 1648, 1638,
2916 1650, 1642, 1647, 1647, 1651, 1652, 1641, 1643, 1644, 1648,
2917 1653, 1654, 1652, 1655, 1643, 1656, 1642, 1644, 1645, 1646,
2918 1646, 1658, 1650, 1660, 1657, 1648, 1659, 1650, 1662, 1647,
2919 1653, 1660, 1652, 1659, 1661, 1663, 1651, 1653, 1665, 1658,
2920 1664, 1664, 1656, 1654, 1663, 1655, 1657, 1666, 1658, 1661,
2921 1660, 1657, 1662, 1659, 1668, 1662, 1667, 1669, 1674, 1676,
2922 1673, 1661, 1663, 1667, 1665, 1665, 1668, 1664, 1671, 1672,
2923 1675, 1676, 0, 1669, 1672, 1671, 1679, 1682, 1675, 1666,
2924 1669, 1668, 1673, 1667, 1669, 1674, 1676, 1673, 1680, 1681,
2925
2926 1678, 1683, 1685, 1687, 0, 1671, 1672, 1675, 1678, 1679,
2927 1669, 1689, 1686, 1679, 1682, 1684, 1687, 1681, 1686, 1680,
2928 1684, 1692, 1694, 1693, 1683, 1680, 1681, 1678, 1683, 1685,
2929 1687, 1684, 1688, 1689, 1690, 1693, 1691, 1695, 1689, 1686,
2930 1688, 1690, 1684, 1691, 1694, 1696, 1697, 1684, 1699, 1694,
2931 1693, 1700, 1702, 1692, 1703, 1701, 1700, 1705, 1706, 1688,
2932 1704, 1690, 1701, 1691, 1695, 1704, 1699, 1700, 1710, 1697,
2933 1709, 1696, 1696, 1697, 1708, 1699, 1707, 1707, 1700, 1702,
2934 1712, 1703, 1701, 1700, 1714, 1709, 1713, 1716, 1718, 1705,
2935 1706, 1715, 1704, 1715, 1730, 1712, 1708, 1709, 1725, 1714,
2936
2937 1710, 1708, 1719, 1707, 1722, 1717, 1721, 1712, 1723, 1713,
2938 1717, 1714, 1722, 1713, 1726, 1727, 1728, 1719, 1715, 1716,
2939 1718, 1721, 1725, 1731, 1732, 1725, 1730, 1729, 1733, 1719,
2940 1723, 1722, 1717, 1721, 1729, 1723, 1736, 1738, 1734, 1745,
2941 1726, 1726, 1727, 1728, 1731, 1739, 1732, 1740, 1744, 1733,
2942 1731, 1732, 1742, 1743, 1729, 1733, 1734, 0, 1736, 1746,
2943 1739, 1738, 1747, 1736, 1738, 1734, 1745, 1742, 1743, 1748,
2944 1744, 1749, 1739, 1740, 1740, 1744, 1750, 1746, 1752, 1742,
2945 1743, 1751, 1753, 1750, 1747, 1755, 1746, 1752, 1754, 1747,
2946 1753, 1748, 1756, 1757, 1770, 1760, 1748, 0, 1749, 1751,
2947
2948 1761, 0, 1759, 1750, 1760, 1752, 1757, 1755, 1751, 1753,
2949 1762, 1754, 1755, 1759, 1763, 1754, 1764, 1765, 1761, 1767,
2950 1757, 1770, 1760, 1765, 1756, 1766, 1772, 1761, 1759, 1759,
2951 1776, 1764, 1763, 1767, 1773, 1777, 1762, 1762, 1774, 1778,
2952 1759, 1763, 1776, 1764, 1765, 1773, 1767, 1766, 1777, 1774,
2953 1772, 1780, 1766, 1772, 1779, 1781, 1782, 1776, 1787, 0,
2954 1783, 1773, 1777, 1786, 1779, 1774, 1785, 0, 1789, 0,
2955 1786, 1778, 1799, 1788, 1789, 1793, 1793, 1780, 1780, 1783,
2956 1781, 1779, 1781, 1782, 1787, 1787, 1785, 1783, 1790, 1791,
2957 1786, 1788, 1792, 1785, 1794, 1789, 1795, 1798, 1797, 1799,
2958
2959 1788, 1800, 1793, 1790, 1791, 1797, 1794, 1792, 1802, 1795,
2960 1800, 1801, 1798, 1830, 1807, 1790, 1791, 1795, 1801, 1792,
2961 1803, 1794, 1804, 1795, 1798, 1797, 1806, 0, 1800, 1804,
2962 1809, 1808, 1802, 1812, 1810, 1802, 1795, 1814, 1801, 1807,
2963 1808, 1807, 1803, 1817, 1815, 1830, 1814, 1803, 1806, 1804,
2964 1816, 1812, 1809, 1806, 1810, 1818, 1820, 1809, 1808, 1821,
2965 1812, 1810, 1815, 1818, 1814, 1816, 1822, 1824, 1817, 1826,
2966 1817, 1815, 1821, 1823, 1823, 1827, 1825, 1816, 1828, 0,
2967 1833, 1820, 1818, 1820, 1831, 1829, 1821, 1828, 1837, 1824,
2968 1832, 1826, 1829, 1822, 1824, 1841, 1826, 1827, 1838, 1833,
2969
2970 1823, 1825, 1827, 1825, 1832, 1828, 1831, 1833, 1835, 1836,
2971 1842, 1831, 1829, 1840, 1839, 1837, 1835, 1832, 1843, 1845,
2972 1840, 1847, 1836, 1844, 1838, 1838, 1839, 1841, 1848, 1846,
2973 1850, 1844, 1842, 1849, 0, 1835, 1836, 1842, 1854, 0,
2974 1840, 1839, 1844, 1843, 1846, 1843, 1845, 1847, 1847, 1857,
2975 1844, 1849, 1850, 1851, 1848, 1848, 1846, 1850, 1844, 1858,
2976 1849, 1853, 1851, 1854, 1853, 1854, 1855, 1857, 1856, 1860,
2977 1861, 1864, 1855, 1856, 1858, 1865, 1857, 1862, 1867, 1853,
2978 1851, 1868, 1865, 1866, 1860, 1864, 1858, 0, 1853, 1890,
2979 1868, 1853, 1861, 1855, 1869, 1870, 1860, 1861, 1864, 1862,
2980
2981 1856, 1866, 1865, 1869, 1862, 1867, 1870, 1871, 1868, 1874,
2982 1866, 1872, 1875, 1877, 1879, 1878, 1890, 0, 1876, 1886,
2983 1871, 1869, 1870, 1872, 1874, 1876, 1884, 1875, 1892, 1885,
2984 1882, 1886, 1879, 1885, 1871, 1877, 1874, 1878, 1872, 1875,
2985 1877, 1879, 1878, 1882, 1889, 1876, 1886, 1884, 1888, 1887,
2986 1888, 1882, 1893, 1884, 1891, 1892, 1885, 1882, 1887, 1894,
2987 1893, 1895, 1889, 1896, 1897, 1898, 1899, 1900, 1901, 1897,
2988 1882, 1889, 1891, 1902, 1905, 1888, 1887, 1896, 1906, 1893,
2989 1902, 1891, 1894, 1895, 1907, 1908, 1894, 1901, 1895, 1909,
2990 1896, 1900, 1906, 1910, 1900, 1901, 1897, 1898, 1899, 1912,
2991
2992 1902, 1905, 1907, 1906, 1906, 1906, 1913, 1915, 1910, 1911,
2993 1916, 1907, 1908, 1914, 1917, 1909, 1909, 0, 1911, 1906,
2994 1910, 1919, 1920, 1923, 1921, 1923, 0, 1930, 1913, 1920,
2995 1906, 1912, 1916, 1913, 1915, 1924, 1911, 1916, 1925, 1914,
2996 1914, 1926, 1925, 1928, 1919, 1927, 1917, 1921, 1919, 1920,
2997 1923, 1921, 1928, 1926, 1930, 1929, 1931, 1924, 1933, 1932,
2998 1934, 1934, 1924, 1935, 1940, 1925, 1929, 1927, 1926, 1936,
2999 1928, 1932, 1927, 1937, 1938, 1939, 0, 1936, 1935, 1931,
3000 1933, 0, 1929, 1931, 1939, 1933, 1932, 1934, 1938, 1942,
3001 1935, 1940, 1953, 0, 0, 1937, 1936, 1943, 1944, 1945,
3002
3003 1937, 1938, 1939, 1945, 1946, 1943, 1944, 1946, 1942, 1947,
3004 1952, 1954, 1948, 1949, 1950, 1955, 1942, 1947, 1948, 1953,
3005 1950, 1956, 1952, 1958, 1943, 1944, 1945, 1959, 1949, 1955,
3006 1957, 1946, 1960, 1961, 1956, 1954, 1947, 1952, 1954, 1948,
3007 1949, 1950, 1955, 1963, 1957, 1961, 1965, 1962, 1956, 1958,
3008 1958, 1969, 1971, 1964, 1959, 1966, 1964, 1957, 1969, 1960,
3009 1961, 1962, 1968, 1972, 1973, 1970, 1975, 1971, 1974, 1963,
3010 1963, 1964, 1970, 1965, 1962, 1977, 1974, 1966, 1969, 1971,
3011 1964, 1979, 1966, 1964, 1968, 1976, 1978, 1980, 1981, 1968,
3012 1972, 1973, 1970, 1975, 1976, 1974, 1982, 1984, 1978, 1983,
3013
3014 1987, 1988, 1977, 1979, 1990, 1995, 1993, 1991, 1979, 1982,
3015 1984, 1985, 1976, 1978, 1980, 1981, 1991, 1983, 1992, 1985,
3016 1994, 1989, 1987, 1982, 1984, 1997, 1983, 1987, 1988, 1989,
3017 1993, 1990, 1995, 1993, 1991, 1994, 1996, 1997, 1985, 1992,
3018 1999, 1998, 2003, 2001, 1996, 1992, 1994, 1994, 1989, 1998,
3019 2001, 2002, 1997, 2004, 2003, 2002, 2005, 2006, 2010, 2007,
3020 2008, 2012, 1994, 1996, 2013, 2006, 2011, 1999, 1998, 2003,
3021 2001, 2007, 2008, 2011, 2016, 2016, 2004, 2013, 2002, 2017,
3022 2004, 2012, 2018, 2005, 2006, 2010, 2007, 2008, 2012, 2014,
3023 2015, 2013, 0, 2011, 2019, 2022, 2020, 0, 2014, 2015,
3024
3025 2018, 2016, 2023, 2024, 2026, 2017, 2017, 2029, 2029, 2018,
3026 2022, 2020, 2025, 2020, 2025, 2028, 2014, 2015, 2026, 2019,
3027 2020, 2019, 2022, 2020, 2023, 2024, 2027, 2031, 2032, 2023,
3028 2024, 2026, 2027, 2033, 2029, 2034, 2037, 2028, 2020, 2025,
3029 2020, 2035, 2028, 2036, 2038, 2033, 2039, 2035, 2039, 2031,
3030 2032, 2040, 2041, 2027, 2031, 2032, 2042, 2046, 2037, 2043,
3031 2033, 2047, 2044, 2037, 2045, 2040, 2038, 2034, 2035, 2048,
3032 2046, 2038, 2049, 2039, 2042, 2036, 2041, 2043, 2040, 2041,
3033 2044, 2051, 2045, 2042, 2046, 2053, 2043, 2054, 2051, 2044,
3034 2055, 2045, 2056, 2047, 2059, 2049, 2060, 2061, 2062, 2049,
3035
3036 2056, 2048, 2057, 2053, 2057, 2059, 0, 2060, 2051, 2057,
3037 2062, 2065, 2053, 2054, 2054, 2063, 2070, 2066, 2056, 2056,
3038 2067, 2059, 2055, 2060, 2061, 2062, 2065, 2056, 2066, 2057,
3039 2068, 2057, 2067, 2063, 2071, 2073, 2074, 2077, 2065, 2072,
3040 2070, 2075, 2063, 2070, 2066, 2068, 2072, 2067, 2078, 2079,
3041 2073, 2080, 2081, 2082, 0, 2084, 2071, 2068, 0, 2085,
3042 2083, 2071, 2073, 2074, 2077, 2086, 2072, 2075, 2075, 2087,
3043 2090, 2079, 2078, 2083, 2085, 2078, 2079, 2087, 2086, 2088,
3044 2082, 2084, 2084, 2080, 2081, 2091, 2085, 2083, 2092, 2093,
3045 2094, 2095, 2086, 2090, 2097, 0, 2087, 2090, 2095, 2096,
3046
3047 2098, 2100, 2104, 2101, 2107, 2088, 2088, 2113, 2094, 2091,
3048 2101, 2093, 2091, 2102, 2098, 2092, 2093, 2094, 2095, 2103,
3049 2102, 2097, 2096, 2100, 2105, 2104, 2096, 2098, 2100, 2104,
3050 2101, 2105, 2103, 2106, 2109, 2108, 2107, 2111, 2114, 2113,
3051 2102, 2112, 2115, 2109, 2119, 2118, 2103, 0, 2111, 2120,
3052 2127, 2105, 2121, 2121, 2122, 2106, 2108, 2114, 2118, 2124,
3053 2106, 2109, 2108, 2112, 2111, 2114, 2125, 2115, 2112, 2115,
3054 2119, 2119, 2118, 2120, 2126, 2128, 2120, 2127, 2131, 2121,
3055 2122, 2122, 2124, 2133, 2135, 2136, 2124, 2139, 2143, 2126,
3056 2140, 2140, 2133, 2128, 2141, 0, 2136, 2135, 2125, 2145,
3057
3058 2142, 2126, 2128, 2147, 2148, 2131, 2151, 2149, 0, 2139,
3059 2133, 2135, 2136, 2155, 2139, 2143, 2141, 2140, 2149, 2150,
3060 2162, 2141, 2142, 2154, 2150, 2157, 2145, 2142, 2151, 2153,
3061 2148, 2148, 2158, 2151, 2149, 2147, 2159, 2153, 2154, 2160,
3062 2155, 2163, 2167, 2157, 2164, 2159, 2150, 2162, 2166, 2163,
3063 2154, 2160, 2157, 2164, 2168, 2170, 2153, 2171, 2169, 0,
3064 0, 2172, 2175, 2159, 2158, 2173, 2160, 2169, 2163, 2167,
3065 2174, 2164, 2176, 2170, 2166, 2166, 2168, 2175, 2173, 2171,
3066 2177, 2168, 2170, 2174, 2171, 2169, 2172, 2177, 2172, 2175,
3067 2178, 2179, 2173, 2180, 2176, 2181, 2182, 2174, 2183, 2176,
3068
3069 2184, 2188, 2185, 0, 2186, 0, 2187, 2177, 2190, 2184,
3070 2191, 2189, 2178, 2183, 2192, 2190, 2188, 2178, 2179, 2194,
3071 2180, 2191, 2181, 2182, 2185, 2183, 2189, 2184, 2188, 2185,
3072 2186, 2186, 2187, 2187, 2193, 2190, 2195, 2191, 2189, 2196,
3073 2198, 2192, 2193, 2197, 2199, 2200, 2194, 2201, 2204, 2202,
3074 2203, 0, 2200, 0, 2208, 2196, 2202, 2203, 2197, 2199,
3075 2198, 2193, 2205, 2195, 2206, 2206, 2196, 2198, 2208, 2201,
3076 2197, 2199, 2200, 2210, 2201, 2204, 2202, 2203, 2207, 2209,
3077 2205, 2208, 2209, 2211, 2212, 2207, 2210, 2213, 2216, 2205,
3078 2217, 2206, 2214, 0, 2218, 2217, 2219, 2216, 2218, 2213,
3079
3080 2210, 2223, 2212, 2220, 2214, 2207, 2209, 2221, 0, 2211,
3081 2211, 2212, 2224, 2222, 2213, 2216, 2220, 2217, 2225, 2214,
3082 2219, 2218, 2227, 2219, 2229, 2231, 2234, 2230, 2223, 2221,
3083 2220, 0, 2236, 2234, 2221, 2222, 2230, 2236, 2232, 2224,
3084 2222, 2231, 2238, 2243, 2225, 2225, 2232, 2235, 2227, 2227,
3085 2229, 2229, 2231, 2234, 2230, 2237, 2235, 2239, 2240, 2236,
3086 2238, 2241, 2237, 2244, 2239, 2232, 2246, 2240, 2244, 2238,
3087 2243, 2245, 2249, 2248, 2235, 2252, 0, 2250, 0, 0,
3088 2258, 2260, 2237, 2251, 2239, 2240, 2250, 2241, 2241, 2245,
3089 2244, 2248, 2251, 2246, 2253, 2252, 2254, 2256, 2245, 2249,
3090
3091 2248, 2257, 2252, 2255, 2250, 2254, 2253, 2258, 2256, 2257,
3092 2251, 2259, 2255, 2260, 2262, 2264, 2261, 2269, 2267, 2263,
3093 2271, 2253, 2265, 2254, 2256, 2261, 2262, 2263, 2257, 2265,
3094 2255, 2268, 2266, 0, 0, 2270, 2275, 2264, 2259, 2266,
3095 2267, 2262, 2264, 2261, 2269, 2267, 2263, 2271, 2278, 2265,
3096 2279, 2277, 2286, 2273, 2275, 2278, 2268, 2276, 2268, 2266,
3097 2270, 2273, 2270, 2275, 2280, 2276, 2277, 2284, 2281, 2285,
3098 2287, 2280, 2279, 2289, 2284, 2278, 2281, 2279, 2277, 2286,
3099 2273, 2288, 2287, 2290, 2276, 2294, 2292, 2295, 2293, 2299,
3100 2288, 2280, 2297, 2285, 2284, 2281, 2285, 2287, 2292, 2297,
3101
3102 2289, 2295, 2298, 2301, 2302, 2303, 2290, 2304, 2288, 2298,
3103 2290, 2293, 2294, 2292, 2295, 2293, 2299, 2305, 2301, 2297,
3104 2306, 2307, 2302, 2308, 2309, 2305, 2311, 2310, 2303, 2298,
3105 2301, 2302, 2303, 2316, 2304, 2309, 2318, 0, 2319, 2321,
3106 2317, 2308, 2310, 2307, 2305, 2317, 2322, 2306, 2307, 2323,
3107 2308, 2309, 2319, 2311, 2310, 2320, 2324, 2321, 2326, 2316,
3108 2316, 2331, 2329, 2318, 2322, 2319, 2321, 2317, 2324, 2320,
3109 2330, 2332, 2333, 2322, 2331, 2336, 2323, 2335, 2334, 2339,
3110 2342, 0, 2320, 2324, 2329, 2326, 2334, 2340, 2331, 2329,
3111 2343, 2333, 2330, 2332, 2336, 2335, 2338, 2330, 2332, 2333,
3112
3113 2341, 2339, 2336, 2348, 2335, 2334, 2339, 2342, 2338, 2340,
3114 2344, 2345, 2341, 2346, 2340, 2347, 2351, 2343, 2350, 2349,
3115 0, 2353, 2346, 2338, 2347, 2352, 2354, 2341, 2351, 2358,
3116 2344, 2359, 2361, 2345, 2360, 2348, 2357, 2344, 2345, 2360,
3117 2346, 2349, 2347, 2351, 2350, 2350, 2349, 2352, 2353, 2362,
3118 2357, 2363, 2352, 2354, 2361, 2359, 2358, 2364, 2359, 2361,
3119 2365, 2366, 2367, 2357, 0, 0, 2360, 2368, 2369, 2372,
3120 2370, 2362, 0, 0, 2367, 2373, 2362, 2375, 2377, 2366,
3121 2364, 2378, 2365, 2363, 2364, 2370, 2368, 2365, 2366, 2367,
3122 2369, 2372, 2375, 2381, 2368, 2369, 2372, 2370, 2379, 2373,
3123
3124 2377, 2380, 2373, 2378, 2375, 2377, 2382, 2379, 2378, 2383,
3125 2387, 2381, 2384, 2390, 2388, 2380, 2392, 2393, 2387, 2389,
3126 2381, 2388, 2394, 2391, 2382, 2379, 0, 2389, 2380, 2393,
3127 2384, 2391, 2401, 2382, 2392, 2383, 2383, 2387, 2400, 2384,
3128 2390, 2388, 2397, 2392, 2393, 2395, 2389, 2403, 2399, 2394,
3129 2391, 2406, 2404, 2395, 2397, 2399, 2402, 2405, 2402, 2401,
3130 2411, 2400, 0, 2407, 2408, 2400, 0, 2410, 2414, 2397,
3131 2413, 2418, 2395, 2417, 2411, 2399, 2415, 2419, 2406, 2403,
3132 2421, 2414, 2407, 2402, 2404, 2410, 2408, 2411, 2415, 2405,
3133 2407, 2408, 2422, 2413, 2410, 2414, 2423, 2413, 2418, 2417,
3134
3135 2417, 2425, 2427, 2415, 2419, 2428, 2429, 2421, 2430, 2427,
3136 2432, 0, 2433, 2430, 2435, 2422, 2436, 2432, 2423, 2422,
3137 2437, 2429, 2438, 2423, 2442, 2440, 2443, 2428, 2425, 2427,
3138 2444, 2442, 2428, 2429, 2440, 2445, 2438, 2432, 2433, 2433,
3139 2430, 2435, 2446, 2436, 2437, 2447, 2448, 2437, 2450, 2438,
3140 2449, 2442, 2440, 2443, 2446, 2451, 2444, 2444, 2452, 2449,
3141 2448, 2450, 2445, 2453, 2457, 2456, 2463, 2458, 2457, 2446,
3142 2456, 2459, 2447, 2448, 2458, 2450, 2461, 2449, 2459, 2460,
3143 2462, 0, 2462, 2464, 2469, 2452, 2453, 2451, 2470, 2463,
3144 2453, 2457, 2467, 2463, 2458, 2476, 2473, 2456, 2459, 2472,
3145
3146 2460, 2472, 2475, 2469, 2476, 2479, 2460, 2462, 2461, 2477,
3147 2464, 2469, 2470, 2484, 2467, 2470, 2477, 2474, 2474, 2467,
3148 2473, 2478, 2476, 2473, 2475, 2480, 2472, 2474, 2481, 2475,
3149 2482, 2483, 2479, 2480, 2478, 2482, 2477, 2485, 2489, 2483,
3150 2484, 2486, 0, 2487, 2474, 2474, 2488, 2481, 2478, 2489,
3151 2491, 0, 2480, 2490, 2494, 2481, 2493, 2491, 2483, 2492,
3152 2492, 2494, 2482, 2485, 2485, 2489, 2497, 2486, 2486, 2487,
3153 2487, 2495, 2488, 2488, 2493, 2490, 2498, 2491, 2495, 2499,
3154 2490, 2494, 2501, 2493, 2502, 2503, 2492, 2506, 2499, 2507,
3155 2508, 2504, 2509, 2497, 2512, 0, 2511, 2513, 2495, 0,
3156
3157 2498, 0, 2523, 2498, 2502, 2511, 2499, 2507, 2508, 2501,
3158 2509, 2502, 2503, 2504, 2506, 2514, 2507, 2508, 2504, 2509,
3159 2513, 2512, 2515, 2511, 2513, 2516, 2517, 2518, 2522, 2523,
3160 2516, 2525, 2528, 2514, 2515, 2526, 2527, 2531, 2527, 0,
3161 2517, 2528, 2514, 2530, 2534, 2518, 2534, 2535, 2526, 2515,
3162 2522, 2537, 2531, 2517, 2518, 2522, 2559, 2516, 2525, 2528,
3163 2536, 2530, 2526, 2527, 2531, 2535, 2539, 2536, 2543, 2541,
3164 2530, 2534, 2544, 2546, 2535, 2541, 2545, 2551, 2552, 2548,
3165 2553, 2539, 2549, 2537, 0, 2549, 0, 2536, 2559, 2556,
3166 2543, 2546, 2554, 2539, 2544, 2543, 2541, 2556, 2557, 2544,
3167
3168 2546, 2548, 2545, 2545, 2551, 2552, 2548, 2553, 2549, 2549,
3169 2554, 2555, 2549, 2560, 2561, 2562, 2556, 2563, 2555, 2554,
3170 2557, 2564, 2566, 2565, 2567, 2557, 2563, 2564, 2568, 0,
3171 2568, 2566, 2569, 2575, 2572, 2560, 2561, 0, 2555, 2571,
3172 2560, 2561, 2562, 2577, 2563, 2565, 2572, 2571, 2564, 2566,
3173 2565, 2573, 2579, 2578, 2580, 2568, 2567, 2577, 2573, 2569,
3174 2575, 2572, 2581, 2582, 2583, 2584, 2571, 2578, 2585, 2585,
3175 2577, 2582, 2580, 2581, 2586, 2579, 2587, 2589, 2573, 2579,
3176 2578, 2580, 2590, 2583, 2587, 2594, 2596, 2584, 2592, 2581,
3177 2582, 2583, 2584, 0, 2592, 2585, 2597, 2596, 2599, 2598,
3178
3179 2601, 2586, 2603, 2587, 2589, 2606, 2603, 2597, 2604, 2590,
3180 2598, 2602, 2594, 2596, 2608, 2592, 2604, 2607, 2602, 2612,
3181 2599, 2611, 2615, 2597, 0, 2599, 2598, 2601, 2611, 2603,
3182 2607, 2606, 2606, 2613, 2614, 2604, 2616, 2618, 2602, 2614,
3183 2617, 2608, 2619, 2622, 2607, 2621, 2623, 2617, 2611, 2615,
3184 2620, 2612, 2621, 2626, 2623, 2613, 2618, 2627, 2619, 2624,
3185 2613, 2614, 2628, 2616, 2618, 2635, 2636, 2617, 2620, 2619,
3186 2632, 2625, 2621, 2623, 2624, 2622, 2634, 2620, 2625, 2637,
3187 2626, 2627, 2638, 2618, 2627, 2632, 2624, 2633, 2628, 2628,
3188 2636, 2638, 2635, 2636, 2633, 2640, 2641, 2632, 2625, 2642,
3189
3190 2643, 2645, 2644, 2644, 2647, 0, 2649, 2642, 2634, 2638,
3191 2651, 2637, 2644, 2648, 2633, 2652, 2653, 2640, 2641, 2655,
3192 0, 2648, 2640, 2641, 2649, 2656, 2642, 2657, 2645, 2644,
3193 2644, 2647, 2643, 2649, 2654, 2658, 2659, 2651, 2653, 2661,
3194 2648, 2655, 2652, 2653, 2666, 2664, 2655, 2654, 2669, 2666,
3195 2667, 2668, 2656, 2664, 2657, 2667, 2668, 2671, 2659, 2675,
3196 2672, 2654, 2658, 2659, 2674, 2677, 2661, 2680, 2683, 2673,
3197 0, 2666, 2664, 2672, 2669, 2669, 2673, 2667, 2668, 2685,
3198 2686, 2678, 2674, 2688, 2671, 2679, 2675, 2672, 2678, 2680,
3199 2687, 2674, 2690, 2679, 2680, 2683, 2673, 2677, 2689, 2691,
3200
3201 2692, 2696, 2686, 2687, 0, 2697, 2685, 2686, 2678, 2694,
3202 2698, 2690, 2679, 2689, 2695, 2688, 2694, 2687, 2705, 2690,
3203 2697, 2695, 2692, 2696, 2700, 2689, 2691, 2692, 2696, 2705,
3204 2701, 2698, 2697, 2702, 2715, 2703, 2694, 2698, 2701, 2704,
3205 2702, 2695, 2703, 2700, 2707, 2705, 2706, 2706, 2704, 2712,
3206 2707, 2700, 2711, 2708, 2716, 2717, 2706, 2701, 2721, 2711,
3207 2702, 2715, 2703, 2712, 2723, 2727, 2704, 2724, 2724, 2725,
3208 2725, 2707, 2729, 2706, 2706, 2708, 2712, 2730, 2717, 2711,
3209 2708, 2716, 2717, 2726, 2726, 2721, 2730, 2731, 2727, 2735,
3210 2733, 2723, 2727, 2736, 2734, 2740, 2724, 2733, 2725, 2729,
3211
3212 2731, 2734, 2741, 2739, 2730, 2739, 2742, 2743, 2746, 2745,
3213 2748, 2735, 2726, 2747, 2731, 2740, 2735, 2733, 2745, 2743,
3214 2736, 2734, 2740, 2749, 2742, 2741, 2746, 2751, 2754, 2741,
3215 2739, 2750, 0, 2742, 2743, 2746, 2745, 2748, 2752, 2747,
3216 2747, 2752, 2753, 2750, 2755, 2756, 2755, 2753, 2758, 2751,
3217 2749, 2759, 2761, 2757, 2751, 2760, 2752, 2756, 2750, 2757,
3218 2754, 2762, 2765, 2760, 2768, 2752, 2769, 2770, 2752, 2771,
3219 2758, 2755, 2756, 2759, 2753, 2758, 2772, 2773, 2759, 2761,
3220 2757, 2774, 2760, 2762, 2776, 2777, 2779, 2778, 2762, 2765,
3221 2780, 2768, 2782, 2769, 2770, 2783, 2771, 2780, 2784, 2789,
3222
3223 2782, 2779, 2776, 2772, 2773, 2778, 2785, 2793, 2774, 2786,
3224 2784, 2776, 2777, 2779, 2778, 2787, 2788, 2780, 2792, 2782,
3225 2785, 2795, 2783, 2796, 2786, 2784, 2789, 2792, 2788, 2794,
3226 2794, 2793, 2796, 2785, 2793, 2798, 2786, 2799, 2800, 2801,
3227 2803, 2787, 2787, 2788, 2802, 2792, 2804, 2795, 2795, 2803,
3228 2796, 2800, 2802, 2815, 2817, 2818, 2794, 2804, 2806, 2798,
3229 2819, 2801, 2798, 2820, 2861, 2800, 2801, 2803, 2817, 2799,
3230 2806, 2802, 2822, 2804, 2823, 2824, 2822, 2815, 2826, 2825,
3231 2815, 2817, 2818, 2831, 2828, 2806, 2825, 2819, 2828, 0,
3232 2820, 2826, 2823, 2829, 2830, 2832, 2861, 2833, 2824, 2822,
3233
3234 2834, 2823, 2824, 0, 2835, 2826, 2825, 2832, 2831, 2829,
3235 2831, 2828, 2835, 2838, 2834, 2838, 2830, 2836, 2837, 2842,
3236 2829, 2830, 2832, 2833, 2833, 2839, 2836, 2834, 2840, 2837,
3237 2846, 2835, 2841, 2848, 2840, 2847, 2849, 2839, 2850, 2841,
3238 2838, 2842, 2847, 2846, 2836, 2837, 2842, 2851, 2852, 2853,
3239 2854, 2859, 2839, 2859, 2849, 2840, 2856, 2846, 2854, 2841,
3240 2848, 2855, 2847, 2849, 2857, 2850, 2862, 2858, 2855, 2860,
3241 2864, 2867, 2865, 2851, 2851, 2852, 2853, 2854, 2859, 2862,
3242 2856, 2860, 2866, 2856, 2865, 2863, 2857, 2874, 2855, 2858,
3243 2866, 2857, 2863, 2862, 2858, 2869, 2860, 2864, 2867, 2865,
3244
3245 2875, 2871, 2876, 2877, 2878, 2879, 2880, 2869, 2882, 2866,
3246 2871, 2877, 2863, 2883, 2874, 2889, 2882, 2881, 2885, 2880,
3247 0, 2876, 2869, 2905, 2885, 2886, 2875, 2875, 2871, 2876,
3248 2877, 2881, 2886, 2880, 2888, 2882, 2878, 2879, 2889, 2891,
3249 2883, 2892, 2889, 2893, 2881, 2885, 2891, 2888, 2894, 2896,
3250 2895, 2893, 2886, 0, 2903, 2905, 2897, 2896, 2898, 0,
3251 2900, 2888, 2894, 2892, 2895, 2901, 2891, 2900, 2892, 2904,
3252 2893, 2902, 0, 2906, 2901, 2894, 2896, 2895, 2897, 2902,
3253 2898, 2903, 2907, 2897, 2908, 2898, 2909, 2900, 2911, 2910,
3254 2912, 2904, 2901, 0, 2914, 2916, 2904, 2910, 2902, 2906,
3255
3256 2906, 2913, 2917, 2921, 2907, 2918, 2908, 2919, 2909, 2907,
3257 2917, 2908, 2923, 2909, 2925, 2919, 2910, 2912, 2916, 2920,
3258 2911, 2914, 2916, 2913, 2927, 2918, 2923, 2920, 2913, 2917,
3259 2922, 2929, 2918, 0, 2919, 2921, 2930, 2934, 2922, 2923,
3260 2925, 2925, 2928, 0, 2930, 2928, 2920, 2931, 2932, 0,
3261 2933, 2927, 2935, 2929, 2938, 2931, 2940, 2922, 2929, 2934,
3262 2928, 2941, 2932, 2930, 2934, 2939, 2935, 2937, 2937, 2928,
3263 2943, 2942, 2928, 2939, 2931, 2932, 2933, 2933, 2944, 2935,
3264 2938, 2938, 2940, 2940, 2945, 2946, 2944, 2941, 2941, 2947,
3265 2943, 2948, 2939, 2942, 2937, 2949, 2951, 2943, 2942, 2950,
3266
3267 2953, 2955, 2952, 2958, 2951, 2944, 2964, 2946, 2953, 2956,
3268 2959, 2945, 2946, 2960, 2947, 2949, 2947, 2956, 2948, 2950,
3269 2962, 2960, 2949, 2951, 2952, 2958, 2950, 2953, 2955, 2952,
3270 2958, 2961, 2959, 2964, 2965, 2966, 2956, 2959, 2967, 2961,
3271 2960, 2968, 2965, 2966, 2971, 2972, 2962, 2962, 2979, 2969,
3272 2973, 2975, 2978, 2981, 2982, 2980, 2979, 0, 2961, 0,
3273 0, 2965, 2966, 2980, 2967, 2967, 0, 0, 2968, 2969,
3274 2973, 2971, 2972, 2975, 2978, 2979, 2969, 2973, 2975, 2978,
3275 2981, 2982, 2980, 2986, 2986, 2986, 2986, 2986, 2986, 2986,
3276 2987, 2987, 2987, 2987, 2987, 2987, 2987, 2988, 2988, 2988,
3277
3278 2988, 2988, 2988, 2988, 2989, 2989, 2989, 2989, 2989, 2989,
3279 2989, 2990, 2990, 2990, 2990, 2990, 2990, 2990, 2992, 2992,
3280 0, 2992, 2992, 2992, 2992, 2993, 2993, 0, 0, 0,
3281 2993, 2993, 2994, 2994, 0, 0, 2994, 0, 2994, 2995,
3282 0, 0, 0, 0, 0, 2995, 2996, 2996, 0, 0,
3283 0, 2996, 2996, 2997, 0, 0, 0, 0, 0, 2997,
3284 2998, 2998, 0, 2998, 2998, 2998, 2998, 2999, 2999, 0,
3285 2999, 2999, 2999, 2999, 2985, 2985, 2985, 2985, 2985, 2985,
3286 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
3287 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
3288
3289 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
3290 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
3291 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
3292 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985, 2985,
3293 2985
2463 4, 4, 5, 5, 6, 6, 5, 32, 6, 7,
2464 7, 7, 7, 33, 7, 8, 8, 8, 8, 32,
2465 8, 9, 9, 9, 10, 10, 10, 19, 51, 51,
2466
2467 1032, 19, 3144, 3, 32, 33, 4, 67, 67, 5,
2468 33, 6, 2566, 13, 13, 13, 13, 7, 13, 14,
2469 14, 14, 14, 8, 14, 15, 15, 15, 9, 25,
2470 1032, 10, 11, 11, 11, 11, 11, 11, 12, 12,
2471 12, 12, 12, 12, 16, 16, 16, 34, 28, 84,
2472 84, 13, 11, 45, 1041, 25, 25, 14, 12, 34,
2473 39, 23, 15, 23, 23, 45, 23, 174, 28, 173,
2474 11, 28, 23, 39, 34, 28, 12, 171, 37, 11,
2475 45, 16, 158, 158, 37, 12, 30, 39, 29, 56,
2476 165, 165, 56, 72, 30, 28, 26, 287, 100, 23,
2477
2478 24, 24, 29, 26, 24, 37, 72, 26, 160, 24,
2479 26, 160, 30, 30, 29, 29, 100, 95, 24, 166,
2480 72, 30, 26, 26, 24, 100, 287, 24, 24, 29,
2481 26, 24, 95, 164, 26, 87, 24, 26, 46, 87,
2482 46, 46, 163, 46, 95, 24, 27, 161, 31, 46,
2483 27, 31, 101, 27, 94, 27, 27, 142, 31, 62,
2484 31, 62, 62, 192, 62, 101, 27, 70, 27, 70,
2485 70, 31, 70, 27, 94, 31, 35, 27, 31, 101,
2486 27, 94, 27, 27, 35, 31, 93, 31, 36, 142,
2487 35, 96, 36, 27, 35, 192, 44, 215, 96, 42,
2488
2489 44, 42, 35, 35, 44, 70, 92, 159, 36, 93,
2490 42, 35, 157, 93, 36, 36, 42, 35, 96, 36,
2491 85, 35, 44, 44, 43, 42, 42, 44, 42, 215,
2492 92, 44, 218, 92, 43, 36, 38, 42, 43, 43,
2493 38, 109, 80, 42, 175, 175, 38, 43, 109, 38,
2494 73, 43, 73, 73, 97, 73, 38, 79, 38, 79,
2495 79, 43, 79, 38, 218, 43, 43, 38, 109, 86,
2496 99, 86, 86, 38, 86, 106, 38, 75, 97, 99,
2497 86, 97, 98, 38, 40, 74, 68, 111, 40, 89,
2498 137, 89, 89, 106, 89, 98, 111, 99, 40, 40,
2499
2500 89, 40, 137, 103, 103, 63, 98, 106, 105, 98,
2501 40, 40, 103, 102, 111, 40, 105, 137, 104, 102,
2502 106, 102, 98, 104, 58, 40, 40, 89, 40, 41,
2503 103, 103, 41, 57, 102, 105, 107, 108, 112, 41,
2504 102, 899, 115, 41, 41, 104, 102, 112, 102, 107,
2505 108, 41, 110, 110, 113, 115, 41, 52, 47, 41,
2506 110, 114, 117, 107, 108, 112, 41, 18, 110, 115,
2507 41, 41, 899, 116, 118, 17, 116, 113, 122, 110,
2508 110, 113, 118, 114, 119, 123, 117, 110, 114, 116,
2509 116, 122, 0, 0, 117, 120, 0, 116, 124, 120,
2510
2511 116, 118, 121, 116, 119, 122, 119, 121, 123, 125,
2512 121, 119, 123, 117, 127, 120, 116, 116, 124, 120,
2513 126, 130, 120, 125, 129, 124, 120, 134, 127, 121,
2514 128, 119, 133, 129, 121, 0, 125, 128, 0, 133,
2515 126, 127, 120, 131, 130, 132, 0, 126, 130, 132,
2516 139, 129, 131, 134, 134, 135, 136, 128, 139, 133,
2517 138, 138, 135, 0, 141, 136, 0, 132, 148, 140,
2518 131, 136, 132, 143, 148, 152, 132, 139, 141, 136,
2519 140, 147, 135, 136, 140, 0, 144, 138, 143, 147,
2520 145, 141, 136, 140, 146, 148, 140, 152, 136, 0,
2521
2522 143, 145, 152, 144, 149, 146, 144, 140, 147, 151,
2523 145, 140, 144, 144, 150, 149, 154, 145, 155, 153,
2524 170, 146, 0, 150, 151, 154, 176, 0, 145, 156,
2525 144, 149, 0, 144, 153, 150, 151, 0, 0, 150,
2526 155, 150, 156, 154, 170, 155, 153, 170, 176, 162,
2527 150, 162, 162, 176, 162, 167, 156, 167, 167, 177,
2528 167, 168, 150, 168, 168, 172, 168, 172, 172, 178,
2529 172, 179, 0, 177, 180, 182, 181, 183, 178, 0,
2530 188, 180, 186, 179, 185, 183, 188, 187, 189, 186,
2531 189, 177, 181, 180, 182, 184, 178, 190, 179, 168,
2532
2533 177, 180, 182, 181, 183, 187, 185, 184, 180, 186,
2534 191, 185, 188, 188, 187, 189, 195, 193, 0, 190,
2535 196, 193, 184, 197, 190, 200, 201, 198, 0, 199,
2536 202, 197, 203, 201, 206, 196, 191, 191, 193, 0,
2537 200, 204, 195, 195, 0, 193, 206, 196, 193, 198,
2538 197, 199, 200, 201, 198, 203, 199, 205, 202, 203,
2539 208, 206, 202, 204, 207, 193, 194, 207, 204, 208,
2540 205, 194, 0, 209, 210, 212, 194, 0, 0, 207,
2541 216, 213, 194, 194, 205, 202, 220, 208, 213, 194,
2542 223, 207, 219, 194, 207, 209, 210, 212, 194, 219,
2543
2544 209, 210, 212, 194, 214, 227, 216, 216, 213, 194,
2545 194, 211, 217, 221, 211, 214, 211, 225, 220, 219,
2546 222, 226, 223, 217, 224, 227, 222, 221, 211, 0,
2547 211, 214, 227, 230, 228, 229, 0, 211, 211, 233,
2548 230, 211, 231, 211, 217, 221, 224, 222, 228, 225,
2549 217, 224, 0, 226, 221, 211, 229, 211, 233, 232,
2550 230, 228, 229, 231, 232, 234, 233, 235, 237, 231,
2551 236, 238, 240, 0, 239, 242, 243, 240, 241, 234,
2552 237, 239, 238, 245, 242, 244, 232, 247, 236, 235,
2553 244, 0, 234, 253, 235, 237, 249, 236, 238, 243,
2554
2555 241, 239, 242, 243, 240, 241, 248, 246, 246, 0,
2556 252, 250, 244, 248, 251, 245, 246, 254, 249, 247,
2557 255, 256, 251, 249, 257, 253, 0, 258, 255, 259,
2558 252, 260, 262, 248, 246, 246, 250, 252, 250, 257,
2559 258, 251, 261, 263, 264, 265, 266, 255, 264, 254,
2560 272, 257, 269, 256, 258, 259, 259, 268, 260, 269,
2561 263, 266, 271, 270, 262, 261, 271, 265, 263, 267,
2562 263, 264, 265, 266, 261, 273, 268, 267, 274, 269,
2563 276, 275, 272, 277, 268, 270, 278, 263, 279, 271,
2564 270, 280, 261, 286, 283, 277, 267, 279, 281, 278,
2565
2566 274, 0, 285, 275, 280, 274, 284, 273, 275, 282,
2567 277, 282, 276, 278, 288, 279, 289, 281, 280, 286,
2568 286, 290, 292, 288, 291, 281, 283, 285, 293, 285,
2569 284, 294, 295, 284, 292, 291, 282, 297, 296, 299,
2570 298, 288, 289, 289, 301, 300, 304, 290, 290, 292,
2571 295, 291, 293, 298, 294, 293, 296, 302, 294, 295,
2572 303, 305, 0, 310, 309, 296, 0, 298, 304, 297,
2573 300, 299, 300, 304, 302, 306, 301, 308, 309, 307,
2574 302, 311, 306, 308, 302, 312, 303, 303, 307, 310,
2575 310, 309, 313, 305, 312, 314, 0, 316, 315, 319,
2576
2577 317, 302, 306, 314, 308, 311, 307, 315, 311, 317,
2578 320, 318, 312, 321, 319, 313, 322, 326, 324, 313,
2579 325, 0, 314, 316, 316, 315, 319, 317, 318, 325,
2580 328, 322, 0, 338, 329, 318, 324, 321, 318, 326,
2581 321, 344, 320, 322, 326, 324, 0, 325, 329, 344,
2582 0, 327, 361, 327, 328, 318, 323, 328, 330, 323,
2583 338, 329, 331, 331, 323, 323, 323, 323, 344, 327,
2584 335, 332, 0, 330, 323, 327, 332, 333, 327, 361,
2585 327, 336, 335, 323, 337, 330, 323, 331, 339, 331,
2586 331, 323, 323, 323, 323, 334, 327, 335, 334, 336,
2587
2588 340, 333, 337, 332, 333, 334, 341, 342, 336, 343,
2589 339, 337, 345, 347, 352, 339, 346, 358, 341, 345,
2590 360, 348, 334, 348, 343, 334, 340, 340, 346, 342,
2591 350, 351, 348, 341, 342, 358, 343, 350, 353, 345,
2592 355, 356, 355, 346, 358, 347, 352, 348, 348, 354,
2593 348, 362, 360, 351, 356, 354, 366, 350, 351, 348,
2594 353, 357, 366, 359, 355, 353, 383, 355, 356, 355,
2595 376, 354, 0, 362, 357, 376, 354, 357, 362, 357,
2596 367, 363, 354, 366, 368, 357, 365, 363, 357, 359,
2597 359, 363, 367, 365, 375, 408, 368, 369, 383, 363,
2598
2599 0, 357, 376, 372, 357, 363, 357, 367, 363, 371,
2600 369, 368, 375, 365, 363, 0, 372, 377, 363, 374,
2601 408, 375, 408, 380, 369, 371, 363, 364, 378, 364,
2602 372, 374, 379, 371, 378, 380, 371, 0, 377, 381,
2603 379, 385, 364, 382, 377, 364, 374, 364, 385, 364,
2604 380, 382, 371, 364, 364, 378, 364, 381, 386, 379,
2605 0, 384, 384, 0, 387, 0, 381, 0, 385, 364,
2606 382, 386, 364, 387, 364, 0, 364, 373, 373, 388,
2607 394, 392, 0, 388, 395, 386, 389, 373, 384, 373,
2608 373, 373, 390, 389, 373, 391, 387, 393, 432, 390,
2609
2610 387, 399, 373, 392, 373, 373, 388, 391, 392, 393,
2611 395, 395, 394, 389, 373, 397, 373, 373, 373, 390,
2612 396, 373, 391, 398, 393, 432, 400, 396, 400, 401,
2613 397, 404, 402, 399, 403, 403, 398, 405, 404, 410,
2614 401, 406, 397, 414, 407, 0, 411, 396, 405, 409,
2615 398, 412, 406, 400, 402, 414, 401, 407, 404, 402,
2616 454, 411, 410, 403, 405, 454, 410, 409, 406, 411,
2617 414, 407, 413, 411, 409, 415, 409, 412, 412, 417,
2618 413, 416, 418, 419, 423, 420, 415, 454, 411, 0,
2619 416, 421, 417, 418, 409, 418, 425, 422, 424, 413,
2620
2621 418, 419, 415, 426, 424, 427, 417, 420, 416, 418,
2622 419, 428, 420, 430, 421, 422, 423, 425, 421, 435,
2623 418, 429, 418, 425, 422, 424, 426, 431, 429, 427,
2624 426, 433, 427, 428, 436, 434, 437, 0, 428, 430,
2625 430, 431, 440, 438, 439, 435, 435, 445, 429, 434,
2626 439, 441, 443, 433, 431, 438, 445, 442, 433, 437,
2627 446, 444, 434, 437, 440, 442, 436, 443, 444, 440,
2628 438, 439, 447, 441, 445, 446, 449, 448, 441, 443,
2629 450, 0, 0, 442, 442, 453, 451, 446, 444, 452,
2630 0, 449, 442, 456, 460, 452, 447, 0, 458, 447,
2631
2632 448, 460, 466, 449, 448, 459, 450, 450, 451, 457,
2633 467, 453, 453, 451, 461, 457, 452, 458, 468, 456,
2634 456, 460, 463, 459, 463, 458, 464, 465, 467, 461,
2635 469, 463, 459, 464, 466, 470, 457, 467, 530, 471,
2636 465, 461, 471, 472, 474, 475, 473, 530, 470, 463,
2637 468, 463, 469, 464, 465, 477, 474, 469, 471, 473,
2638 478, 476, 470, 479, 480, 530, 471, 472, 476, 471,
2639 472, 474, 482, 473, 483, 481, 479, 475, 482, 477,
2640 481, 484, 477, 478, 485, 486, 480, 487, 476, 0,
2641 479, 480, 478, 492, 493, 489, 485, 483, 487, 482,
2642
2643 492, 483, 481, 484, 494, 488, 493, 486, 484, 489,
2644 478, 485, 486, 488, 487, 495, 497, 496, 0, 0,
2645 492, 493, 489, 495, 0, 0, 505, 494, 496, 0,
2646 0, 494, 488, 490, 500, 499, 0, 502, 490, 497,
2647 490, 498, 495, 497, 496, 498, 490, 499, 490, 514,
2648 505, 490, 490, 505, 0, 502, 500, 514, 490, 490,
2649 490, 500, 499, 498, 502, 490, 501, 490, 498, 501,
2650 503, 504, 498, 490, 507, 490, 514, 501, 490, 490,
2651 503, 507, 504, 506, 512, 490, 508, 506, 509, 518,
2652 509, 510, 511, 501, 513, 515, 501, 518, 504, 512,
2653
2654 515, 507, 503, 516, 511, 517, 513, 503, 519, 522,
2655 506, 512, 508, 508, 523, 509, 518, 510, 510, 511,
2656 519, 513, 515, 517, 520, 516, 524, 522, 525, 528,
2657 516, 0, 517, 534, 526, 519, 522, 523, 529, 527,
2658 531, 523, 528, 525, 533, 520, 526, 527, 532, 535,
2659 529, 520, 534, 536, 538, 525, 528, 537, 524, 0,
2660 534, 526, 532, 531, 539, 529, 527, 531, 540, 533,
2661 541, 533, 537, 549, 543, 532, 535, 542, 544, 539,
2662 545, 550, 546, 541, 537, 536, 538, 545, 552, 542,
2663 545, 539, 540, 546, 547, 540, 543, 541, 545, 547,
2664
2665 549, 543, 544, 551, 542, 544, 548, 545, 550, 546,
2666 553, 554, 557, 555, 545, 552, 0, 545, 555, 556,
2667 548, 559, 558, 560, 566, 556, 547, 561, 563, 559,
2668 562, 0, 563, 548, 571, 551, 557, 553, 568, 557,
2669 565, 567, 560, 554, 558, 555, 556, 568, 559, 558,
2670 560, 561, 562, 564, 561, 563, 566, 562, 573, 569,
2671 572, 564, 570, 565, 567, 568, 571, 565, 567, 570,
2672 574, 573, 576, 579, 575, 574, 0, 578, 581, 574,
2673 564, 569, 572, 575, 577, 573, 569, 572, 578, 570,
2674 580, 581, 584, 577, 574, 579, 582, 574, 576, 576,
2675
2676 579, 575, 574, 585, 578, 581, 574, 586, 582, 592,
2677 587, 577, 580, 588, 589, 0, 591, 580, 592, 593,
2678 590, 585, 596, 582, 584, 597, 595, 591, 603, 596,
2679 585, 586, 587, 587, 586, 588, 592, 587, 589, 593,
2680 588, 589, 590, 591, 594, 598, 593, 590, 595, 596,
2681 600, 601, 597, 595, 599, 602, 605, 608, 594, 587,
2682 603, 600, 599, 598, 604, 606, 606, 611, 607, 601,
2683 602, 594, 598, 610, 613, 612, 615, 600, 601, 608,
2684 605, 599, 602, 605, 608, 604, 610, 609, 614, 620,
2685 0, 604, 607, 617, 606, 607, 609, 612, 615, 611,
2686
2687 610, 625, 612, 615, 616, 618, 613, 617, 619, 616,
2688 621, 622, 614, 626, 609, 614, 628, 623, 621, 618,
2689 617, 620, 619, 619, 624, 630, 0, 625, 625, 622,
2690 619, 624, 618, 626, 632, 619, 616, 621, 622, 623,
2691 626, 627, 629, 633, 623, 633, 634, 630, 628, 619,
2692 619, 624, 630, 631, 635, 636, 627, 629, 631, 642,
2693 632, 632, 635, 637, 0, 627, 638, 639, 627, 629,
2694 633, 634, 637, 634, 643, 638, 639, 641, 640, 0,
2695 636, 635, 636, 627, 641, 631, 640, 645, 644, 647,
2696 637, 642, 648, 638, 639, 646, 649, 643, 647, 645,
2697
2698 648, 643, 651, 653, 641, 640, 644, 646, 650, 654,
2699 656, 649, 652, 655, 645, 644, 647, 654, 653, 648,
2700 650, 655, 646, 649, 662, 652, 0, 0, 664, 657,
2701 653, 658, 659, 656, 651, 650, 654, 656, 657, 652,
2702 655, 659, 658, 660, 660, 661, 662, 663, 667, 666,
2703 665, 662, 660, 661, 664, 664, 657, 666, 658, 659,
2704 663, 669, 0, 674, 667, 668, 672, 673, 670, 676,
2705 660, 660, 661, 665, 663, 667, 666, 665, 668, 670,
2706 672, 671, 675, 669, 677, 674, 680, 673, 669, 671,
2707 674, 676, 668, 672, 673, 670, 676, 679, 678, 681,
2708
2709 682, 683, 675, 688, 680, 0, 677, 678, 671, 675,
2710 684, 677, 681, 680, 685, 0, 683, 679, 682, 686,
2711 687, 688, 689, 690, 679, 678, 681, 682, 683, 691,
2712 688, 692, 684, 687, 689, 691, 690, 684, 685, 0,
2713 693, 685, 686, 694, 695, 697, 686, 687, 693, 689,
2714 690, 698, 699, 697, 700, 702, 691, 702, 692, 699,
2715 703, 701, 695, 704, 0, 705, 693, 693, 0, 703,
2716 694, 695, 697, 706, 712, 693, 701, 700, 709, 699,
2717 707, 700, 702, 698, 705, 709, 712, 703, 701, 707,
2718 718, 719, 705, 706, 708, 704, 708, 0, 0, 715,
2719
2720 706, 712, 0, 721, 722, 709, 0, 707, 718, 715,
2721 723, 727, 719, 0, 0, 722, 730, 718, 719, 724,
2722 727, 708, 710, 728, 721, 710, 715, 725, 726, 710,
2723 721, 722, 710, 723, 729, 732, 728, 723, 727, 710,
2724 710, 729, 710, 760, 726, 724, 724, 710, 730, 710,
2725 728, 734, 710, 725, 725, 726, 710, 732, 733, 710,
2726 734, 729, 732, 735, 733, 735, 710, 710, 736, 710,
2727 731, 731, 737, 731, 738, 760, 731, 737, 734, 739,
2728 742, 731, 0, 741, 0, 733, 0, 731, 731, 743,
2729 735, 745, 736, 0, 738, 736, 731, 731, 731, 740,
2730
2731 731, 738, 742, 731, 737, 739, 739, 742, 731, 741,
2732 741, 740, 744, 743, 731, 731, 743, 746, 745, 748,
2733 747, 750, 749, 751, 752, 754, 740, 748, 750, 753,
2734 766, 751, 756, 759, 744, 747, 0, 754, 759, 744,
2735 755, 762, 746, 752, 746, 749, 748, 747, 750, 749,
2736 751, 752, 754, 755, 757, 753, 753, 758, 756, 756,
2737 759, 761, 766, 757, 763, 765, 767, 755, 762, 763,
2738 769, 0, 758, 768, 0, 0, 771, 770, 773, 774,
2739 772, 757, 776, 761, 758, 0, 0, 765, 761, 775,
2740 777, 776, 765, 778, 780, 768, 763, 771, 767, 772,
2741
2742 768, 770, 769, 771, 770, 773, 774, 772, 775, 776,
2743 779, 781, 777, 778, 782, 783, 775, 777, 779, 784,
2744 778, 780, 786, 788, 787, 0, 788, 784, 0, 781,
2745 789, 791, 792, 782, 794, 790, 794, 779, 781, 797,
2746 786, 782, 787, 793, 797, 795, 784, 783, 819, 786,
2747 788, 787, 789, 790, 792, 791, 793, 789, 791, 792,
2748 796, 794, 790, 795, 798, 799, 801, 800, 806, 0,
2749 793, 797, 795, 802, 796, 800, 802, 799, 803, 805,
2750 819, 808, 807, 809, 801, 0, 803, 796, 807, 809,
2751 798, 798, 799, 801, 800, 806, 812, 814, 816, 0,
2752
2753 802, 812, 803, 808, 805, 803, 805, 810, 808, 807,
2754 809, 811, 813, 803, 810, 814, 815, 817, 811, 813,
2755 815, 816, 818, 812, 814, 816, 817, 820, 822, 823,
2756 818, 821, 824, 827, 810, 825, 822, 0, 811, 813,
2757 828, 826, 823, 815, 817, 820, 821, 828, 825, 818,
2758 830, 829, 831, 824, 820, 822, 823, 830, 821, 824,
2759 827, 833, 825, 826, 836, 832, 833, 828, 826, 829,
2760 838, 831, 832, 834, 837, 835, 839, 830, 829, 831,
2761 840, 834, 835, 838, 841, 842, 843, 840, 833, 849,
2762 0, 844, 832, 846, 0, 845, 836, 838, 847, 844,
2763
2764 834, 848, 835, 845, 847, 850, 837, 840, 839, 843,
2765 845, 853, 852, 843, 851, 846, 841, 842, 844, 855,
2766 846, 849, 845, 851, 854, 847, 852, 848, 848, 850,
2767 845, 854, 850, 856, 857, 858, 859, 0, 861, 852,
2768 858, 851, 856, 853, 862, 860, 855, 863, 859, 862,
2769 865, 854, 867, 864, 863, 867, 857, 868, 865, 870,
2770 856, 857, 873, 859, 861, 861, 870, 858, 860, 874,
2771 868, 862, 860, 875, 863, 864, 871, 865, 876, 867,
2772 864, 877, 871, 877, 868, 875, 870, 896, 873, 873,
2773 0, 878, 874, 881, 880, 0, 874, 879, 882, 0,
2774
2775 875, 0, 0, 871, 872, 876, 872, 880, 877, 879,
2776 872, 882, 872, 885, 878, 881, 884, 872, 878, 896,
2777 881, 880, 872, 886, 879, 882, 885, 883, 872, 887,
2778 889, 872, 883, 872, 884, 886, 890, 872, 888, 872,
2779 885, 887, 891, 884, 872, 889, 886, 892, 888, 872,
2780 886, 893, 894, 892, 897, 891, 887, 889, 890, 883,
2781 888, 895, 886, 890, 893, 888, 898, 900, 901, 891,
2782 894, 903, 0, 901, 892, 888, 902, 0, 893, 894,
2783 903, 905, 895, 906, 902, 910, 897, 907, 895, 909,
2784 0, 908, 0, 898, 911, 901, 905, 915, 903, 900,
2785
2786 907, 0, 0, 902, 904, 906, 908, 910, 905, 904,
2787 906, 904, 910, 911, 907, 909, 909, 904, 908, 912,
2788 913, 911, 904, 904, 915, 914, 919, 920, 913, 904,
2789 904, 904, 912, 914, 916, 917, 904, 921, 904, 922,
2790 923, 924, 917, 930, 904, 921, 912, 913, 942, 904,
2791 904, 920, 914, 922, 920, 927, 904, 916, 919, 925,
2792 928, 916, 917, 924, 921, 929, 922, 925, 924, 932,
2793 931, 933, 923, 927, 934, 930, 929, 932, 928, 937,
2794 942, 934, 927, 936, 940, 938, 925, 928, 931, 935,
2795 936, 939, 929, 933, 937, 0, 932, 931, 933, 948,
2796
2797 946, 934, 935, 938, 941, 940, 937, 948, 944, 939,
2798 936, 940, 938, 946, 941, 947, 935, 949, 939, 944,
2799 950, 951, 947, 952, 953, 957, 948, 946, 0, 950,
2800 949, 941, 956, 951, 958, 944, 959, 964, 962, 960,
2801 964, 0, 947, 957, 949, 952, 953, 950, 951, 962,
2802 952, 953, 957, 960, 956, 965, 966, 963, 970, 956,
2803 958, 958, 963, 964, 964, 962, 960, 964, 959, 966,
2804 967, 969, 970, 968, 971, 972, 0, 967, 974, 965,
2805 969, 973, 965, 966, 968, 970, 971, 975, 973, 963,
2806 976, 977, 979, 981, 983, 991, 980, 967, 969, 975,
2807
2808 968, 971, 980, 982, 977, 983, 984, 972, 973, 985,
2809 974, 986, 976, 988, 975, 981, 979, 976, 977, 979,
2810 981, 983, 990, 980, 989, 982, 986, 991, 984, 992,
2811 982, 985, 993, 984, 988, 989, 985, 994, 986, 995,
2812 988, 996, 0, 990, 997, 999, 994, 998, 1001, 990,
2813 993, 989, 999, 997, 1000, 998, 992, 1002, 1003, 993,
2814 1004, 1005, 1001, 995, 994, 1007, 995, 996, 996, 1006,
2815 1011, 997, 999, 1010, 998, 1001, 1009, 1012, 1000, 1013,
2816 1010, 1000, 1004, 1005, 0, 1009, 1016, 1004, 1005, 1002,
2817 1003, 1006, 1014, 1015, 1018, 1016, 1006, 1007, 1019, 1012,
2818
2819 1010, 1017, 1011, 1009, 1012, 1021, 1013, 1020, 1023, 1017,
2820 1014, 1015, 1022, 1016, 1021, 1024, 1023, 1025, 1018, 1014,
2821 1015, 1018, 1019, 1020, 1026, 1019, 1027, 1022, 1017, 1028,
2822 1029, 1030, 1021, 1033, 1020, 1023, 1026, 1031, 1029, 1022,
2823 1039, 1034, 1033, 1036, 1030, 1036, 1035, 1024, 1027, 1025,
2824 0, 1026, 1031, 1027, 1035, 1038, 1028, 1029, 1030, 1034,
2825 1033, 1042, 1040, 1038, 1031, 1043, 1044, 1039, 1034, 1040,
2826 1036, 1047, 1045, 1035, 1042, 1049, 1048, 1043, 1046, 1050,
2827 0, 1044, 1038, 1048, 0, 1052, 1051, 1053, 1042, 1040,
2828 0, 1054, 1043, 1044, 1045, 1056, 1046, 1063, 1047, 1045,
2829
2830 0, 0, 1055, 1048, 1054, 1046, 1059, 1049, 1051, 1053,
2831 1052, 1050, 1052, 1051, 1053, 1055, 1057, 1056, 1054, 1058,
2832 1060, 1064, 1056, 1061, 1063, 1066, 1059, 1058, 1057, 1055,
2833 1065, 1061, 1060, 1059, 1064, 1067, 1071, 1066, 1068, 1065,
2834 0, 1072, 1073, 1057, 1069, 1068, 1058, 1060, 1064, 1074,
2835 1061, 1077, 1066, 1069, 1075, 1069, 1067, 1065, 1069, 1071,
2836 1076, 1079, 1067, 1071, 1073, 1068, 1069, 1072, 1072, 1073,
2837 1079, 1069, 1080, 1076, 1075, 1077, 1074, 0, 1077, 1081,
2838 1069, 1075, 1069, 1078, 1082, 1069, 1084, 1076, 1079, 1083,
2839 1080, 1078, 1082, 1085, 1086, 1088, 1089, 1090, 1091, 1080,
2840
2841 1095, 1081, 1086, 1093, 1083, 1091, 1081, 1092, 1084, 1085,
2842 1078, 1082, 1095, 1084, 1094, 1176, 1083, 1100, 1089, 1090,
2843 1085, 1086, 1088, 1089, 1090, 1091, 1093, 1095, 1096, 1092,
2844 1093, 1097, 1094, 1098, 1092, 1099, 1101, 1100, 1102, 1097,
2845 1096, 1094, 1176, 1103, 1100, 1104, 1102, 1099, 1098, 1103,
2846 1105, 1101, 1106, 1111, 1104, 1096, 1109, 1112, 1097, 1107,
2847 1098, 1108, 1099, 1101, 1106, 1102, 1107, 1113, 1108, 1112,
2848 1103, 1105, 1104, 1114, 1109, 1115, 1116, 1105, 1117, 1106,
2849 1113, 1119, 1115, 1109, 1112, 1111, 1107, 1121, 1108, 1119,
2850 1118, 1120, 1114, 1117, 1113, 1118, 0, 1122, 1116, 1124,
2851
2852 1114, 1121, 1115, 1116, 1120, 1117, 1126, 1142, 1119, 1125,
2853 1128, 0, 0, 1124, 1121, 1127, 1130, 1129, 1120, 1133,
2854 1142, 0, 1118, 1122, 1122, 1123, 1124, 1125, 1123, 1123,
2855 0, 1131, 1128, 1123, 1142, 1129, 1125, 1128, 1126, 1123,
2856 1132, 1127, 1127, 1123, 1129, 1133, 1133, 1123, 1130, 1135,
2857 1139, 1134, 1123, 1131, 1138, 1123, 1123, 1134, 1131, 1136,
2858 1123, 1136, 1132, 1138, 1137, 1140, 1123, 1132, 1139, 1144,
2859 1123, 1137, 1140, 1141, 1145, 1135, 1135, 1139, 1134, 0,
2860 1143, 1138, 1146, 1136, 1149, 1147, 1136, 1151, 1136, 1143,
2861 0, 1137, 1140, 0, 1153, 1141, 1150, 1150, 0, 0,
2862
2863 1141, 1144, 0, 1151, 1146, 1156, 1145, 1143, 1147, 1146,
2864 1149, 1149, 1147, 1148, 1151, 1154, 1160, 1153, 1148, 1155,
2865 1148, 1153, 1148, 1156, 1148, 1150, 1158, 1154, 1155, 1157,
2866 1159, 1148, 1156, 1163, 1157, 1159, 1162, 1161, 1160, 1165,
2867 1148, 1163, 1154, 1160, 1158, 1148, 1155, 1148, 1164, 1148,
2868 1161, 1148, 1165, 1158, 1162, 1166, 1164, 1159, 1167, 1168,
2869 1163, 1157, 1173, 1162, 1161, 1172, 1165, 1169, 1170, 1171,
2870 1174, 1173, 1174, 1178, 1179, 1164, 1175, 0, 1168, 1177,
2871 1169, 1181, 1171, 1172, 1167, 1167, 1168, 1166, 1182, 1173,
2872 1170, 1177, 1172, 1184, 1169, 1170, 1171, 1174, 1175, 1179,
2873
2874 1178, 1179, 1185, 1175, 1183, 1181, 1177, 1186, 1181, 1187,
2875 1182, 1184, 1183, 1188, 1186, 1182, 1189, 1190, 1191, 1192,
2876 1184, 1193, 0, 1190, 1191, 1194, 1195, 0, 1193, 1185,
2877 0, 1183, 1196, 1195, 1186, 1198, 1187, 1197, 1189, 1188,
2878 1188, 1199, 1201, 1189, 1190, 1191, 1192, 1211, 1193, 1194,
2879 1199, 1202, 1194, 1195, 1196, 1197, 1211, 1203, 1204, 1196,
2880 1198, 1205, 1198, 1202, 1197, 1207, 1201, 1206, 1199, 1201,
2881 1209, 1204, 1212, 1208, 1211, 1214, 1210, 1216, 1202, 1203,
2882 1217, 1213, 1219, 1205, 1203, 1204, 1206, 1207, 1205, 1214,
2883 1222, 1218, 1207, 1212, 1206, 1208, 1209, 1209, 1210, 1212,
2884
2885 1208, 1213, 1214, 1210, 1220, 1223, 1222, 1221, 1213, 1216,
2886 1229, 0, 1217, 1218, 1219, 1221, 1224, 1222, 1218, 1227,
2887 1228, 1226, 1220, 1224, 1228, 1230, 1227, 1233, 1231, 1235,
2888 0, 1220, 1223, 1226, 1221, 1236, 1235, 1239, 1234, 1237,
2889 0, 0, 1229, 1224, 1234, 1238, 1227, 1228, 1226, 1231,
2890 1236, 1234, 1237, 1240, 1238, 1231, 1235, 1230, 1244, 1233,
2891 1240, 1242, 1236, 1239, 1239, 1234, 1237, 1241, 1243, 1241,
2892 1242, 1234, 1238, 1245, 1246, 1248, 1249, 1245, 1250, 1251,
2893 1240, 1249, 0, 1248, 1252, 1244, 1253, 1250, 1242, 0,
2894 1243, 1261, 1254, 1258, 1241, 1243, 1246, 1251, 1257, 1253,
2895
2896 1245, 1246, 1248, 1252, 1254, 1250, 1251, 1256, 1249, 1255,
2897 1256, 1252, 1255, 1253, 1259, 1262, 1257, 1263, 1258, 1254,
2898 1258, 1255, 1265, 1261, 0, 1257, 1264, 1259, 1268, 1256,
2899 1265, 1264, 1269, 1263, 1256, 1271, 1255, 1256, 1262, 1255,
2900 0, 1259, 1262, 1267, 1263, 1266, 1266, 1270, 1274, 1265,
2901 1268, 1277, 1267, 1272, 1269, 1268, 1270, 1271, 1264, 1269,
2902 1272, 1274, 1271, 1278, 1275, 1281, 0, 1276, 1282, 1284,
2903 1267, 0, 1266, 1275, 1270, 1274, 1276, 1277, 1277, 1279,
2904 1272, 1280, 1284, 1282, 1283, 1288, 1278, 1285, 1279, 1280,
2905 1278, 1275, 1283, 1286, 1276, 1282, 1284, 1281, 1289, 1285,
2906
2907 1290, 1287, 1299, 1292, 1291, 1286, 1279, 1288, 1280, 1287,
2908 1293, 1283, 1288, 1291, 1285, 1296, 1300, 1294, 1289, 1295,
2909 1286, 1292, 1290, 1298, 1304, 1289, 1296, 1290, 1287, 1294,
2910 1292, 1291, 1297, 1305, 1299, 1301, 1293, 1293, 1297, 1302,
2911 1295, 1308, 1296, 1307, 1294, 1298, 1295, 0, 1300, 1306,
2912 1298, 1304, 1307, 1310, 1308, 1311, 1305, 1309, 1313, 1297,
2913 1305, 1301, 1301, 0, 1312, 1302, 1302, 1306, 1308, 1309,
2914 1307, 1312, 1314, 1310, 1315, 1316, 1306, 1313, 1320, 1319,
2915 1310, 1311, 1311, 1316, 1309, 1313, 1319, 1315, 1317, 1321,
2916 1318, 1312, 1322, 1317, 1314, 1318, 1323, 1321, 0, 1314,
2917
2918 1322, 1315, 1316, 1324, 1320, 1320, 1319, 1325, 1328, 1327,
2919 1326, 1329, 1330, 1330, 1323, 1325, 1321, 1326, 1327, 1322,
2920 1317, 1331, 1318, 1323, 1332, 1324, 1334, 1333, 0, 0,
2921 1324, 0, 1332, 1329, 1325, 1335, 1327, 1326, 1329, 1330,
2922 1328, 1336, 1337, 1335, 1338, 1341, 1339, 1345, 1333, 1336,
2923 1337, 1332, 1338, 1331, 1333, 1340, 1343, 1341, 1334, 1339,
2924 1342, 1340, 1335, 1344, 1346, 1349, 1347, 1350, 1336, 1337,
2925 1351, 1338, 1341, 1339, 1345, 1348, 0, 1356, 1344, 1349,
2926 1343, 1355, 1340, 1343, 1351, 1350, 1342, 1342, 1347, 1356,
2927 1344, 1346, 1349, 1347, 1350, 1352, 1354, 1351, 1348, 1352,
2928
2929 1357, 1359, 1348, 1355, 1356, 1354, 1358, 1357, 1355, 1360,
2930 1361, 1365, 1352, 1362, 0, 0, 1363, 1358, 0, 1364,
2931 1352, 1366, 1352, 1354, 1371, 1362, 1352, 1357, 1359, 1370,
2932 1363, 1360, 0, 1358, 1365, 1378, 1360, 1377, 1365, 1352,
2933 1362, 1364, 1361, 1363, 1366, 1367, 1364, 1368, 1366, 1373,
2934 1369, 1371, 1367, 1375, 1381, 0, 1368, 1369, 1373, 1375,
2935 1376, 1370, 1379, 1377, 1377, 1384, 1383, 1378, 1385, 1379,
2936 1388, 1389, 1367, 1386, 1368, 0, 1373, 1369, 1389, 1385,
2937 1375, 1381, 1376, 1390, 1386, 1391, 1395, 1376, 1397, 1379,
2938 1383, 1392, 1384, 1383, 1388, 1385, 1393, 1388, 1389, 1394,
2939
2940 1386, 1390, 1393, 1392, 1396, 1407, 1398, 1394, 1395, 1400,
2941 1390, 1391, 1391, 1395, 1397, 1397, 1399, 1396, 1392, 1402,
2942 1401, 1400, 1401, 1393, 1398, 1399, 1394, 1403, 1404, 1405,
2943 1406, 1396, 1407, 1398, 1409, 1408, 1400, 1404, 1410, 1411,
2944 1403, 1409, 1406, 1399, 1411, 1402, 1402, 1401, 1413, 1417,
2945 1415, 1405, 1412, 0, 1403, 1404, 1405, 1406, 1408, 1414,
2946 1419, 1409, 1408, 1418, 1410, 1410, 1411, 1414, 1412, 1419,
2947 1420, 1413, 1415, 1424, 1418, 1413, 1417, 1415, 1422, 1412,
2948 1421, 1421, 1423, 1420, 1423, 1426, 1414, 1419, 1421, 1425,
2949 1418, 1422, 1426, 1429, 1427, 1428, 1430, 1420, 1433, 1424,
2950
2951 1424, 1427, 1431, 1430, 1432, 1422, 1435, 1421, 1421, 1423,
2952 1434, 1425, 1426, 1428, 1438, 1429, 1425, 1434, 1440, 1437,
2953 1429, 1427, 1428, 1430, 1455, 1439, 1432, 1431, 1442, 1431,
2954 1433, 1432, 1437, 1439, 1444, 0, 1445, 1434, 1435, 1440,
2955 1443, 1438, 1447, 1443, 1446, 1440, 1437, 1448, 1449, 1451,
2956 1442, 1447, 1439, 1450, 0, 1442, 1455, 1446, 1451, 1448,
2957 1444, 1444, 1445, 1445, 1459, 1456, 1452, 1443, 1460, 1447,
2958 1453, 1446, 1449, 1463, 1448, 1449, 1451, 1453, 1457, 1450,
2959 1450, 1452, 1459, 1454, 1462, 1464, 1454, 1456, 1466, 0,
2960 1460, 1459, 1456, 1452, 1457, 1460, 1465, 1453, 1454, 1461,
2961
2962 1463, 1461, 1457, 1467, 1468, 1457, 1469, 1454, 1462, 1475,
2963 1454, 1462, 1473, 1454, 1466, 1466, 1472, 1464, 1465, 1473,
2964 1470, 1457, 1471, 1465, 1472, 1454, 1461, 1474, 1469, 1467,
2965 1467, 1471, 1476, 1469, 1470, 1477, 1468, 1478, 1479, 1473,
2966 1481, 1475, 1479, 1472, 1480, 1484, 1482, 1470, 1485, 1471,
2967 1483, 1474, 1484, 0, 1474, 1485, 0, 1477, 0, 1483,
2968 1491, 1486, 1477, 1487, 1476, 1479, 1480, 1481, 1482, 1478,
2969 1488, 1480, 1484, 1482, 1486, 1485, 1487, 1483, 1489, 1492,
2970 1490, 1495, 1493, 1494, 1497, 1488, 1492, 1495, 1486, 1493,
2971 1487, 1498, 1491, 1489, 1490, 1499, 1494, 1488, 1498, 1500,
2972
2973 1501, 1502, 1505, 1507, 0, 1489, 1492, 1490, 1495, 1493,
2974 1494, 1497, 1501, 1503, 1502, 1504, 1503, 1499, 1498, 1506,
2975 1505, 0, 1499, 1507, 1504, 1500, 1500, 1501, 1502, 1505,
2976 1507, 1506, 1508, 1509, 1514, 1508, 1511, 1513, 1515, 1513,
2977 1503, 1511, 1504, 1516, 1509, 1518, 1506, 1519, 1511, 1520,
2978 1508, 1517, 0, 1521, 1518, 0, 1531, 1523, 1514, 1508,
2979 1509, 1514, 1508, 1511, 1513, 1515, 1517, 1521, 1511, 1522,
2980 1516, 1519, 1518, 1524, 1519, 1525, 1520, 1522, 1517, 1523,
2981 1521, 1526, 1528, 1525, 1523, 1527, 1529, 1530, 1531, 1529,
2982 1528, 1532, 1526, 1534, 1533, 1524, 1522, 1535, 1536, 1537,
2983
2984 1524, 1533, 1525, 1527, 1529, 1530, 1535, 1534, 1526, 1528,
2985 1537, 1536, 1527, 1529, 1530, 1538, 1529, 1541, 1532, 1541,
2986 1534, 1533, 1542, 1544, 1535, 1536, 1537, 1543, 1545, 1546,
2987 1538, 1542, 1553, 1547, 1544, 1549, 1550, 1553, 0, 1552,
2988 1548, 0, 1538, 1548, 1541, 1550, 1545, 1547, 1552, 1542,
2989 1544, 1546, 1559, 1543, 1543, 1545, 1546, 1549, 1548, 1547,
2990 1547, 1556, 1549, 1550, 1553, 1551, 1552, 1548, 1555, 1558,
2991 1548, 1551, 1557, 1556, 1547, 1561, 1560, 1557, 1562, 1563,
2992 1564, 1555, 1567, 1569, 1559, 1560, 1565, 1568, 1556, 1567,
2993 1570, 1558, 1551, 1572, 1580, 1555, 1558, 1574, 0, 1557,
2994
2995 1568, 1563, 1561, 1560, 1570, 1571, 1563, 1565, 1580, 1567,
2996 1562, 1571, 1564, 1565, 1568, 1569, 1574, 1570, 1576, 1577,
2997 1578, 1580, 1579, 1581, 1574, 1572, 1576, 1577, 1582, 1571,
2998 1583, 1584, 1571, 1585, 1586, 1588, 1593, 1581, 1571, 1578,
2999 1579, 1582, 1587, 1583, 1589, 1576, 1577, 1578, 0, 1579,
3000 1581, 1589, 1584, 1591, 1590, 1582, 1587, 1583, 1584, 1592,
3001 1598, 1591, 1588, 1590, 1595, 1585, 1586, 1594, 1593, 1587,
3002 1599, 1589, 1594, 1592, 1596, 1595, 1600, 1599, 1601, 1584,
3003 1591, 1590, 1602, 1596, 1603, 1609, 1592, 1598, 1605, 1604,
3004 1608, 1595, 1605, 1607, 1594, 0, 1613, 1599, 1611, 1600,
3005
3006 1601, 1596, 1608, 1600, 1602, 1601, 1603, 1604, 1607, 1602,
3007 1610, 1603, 1609, 1611, 1612, 1605, 1604, 1608, 1610, 1614,
3008 1607, 1616, 1612, 1613, 1615, 1611, 1618, 1617, 1619, 1620,
3009 1621, 1622, 1614, 1624, 1618, 1619, 1616, 1610, 1623, 1625,
3010 1622, 1612, 1617, 1626, 1615, 1621, 1614, 1628, 1616, 1629,
3011 1630, 1615, 1631, 1618, 1617, 1619, 1632, 1621, 1622, 1623,
3012 1624, 1620, 1633, 1625, 1634, 1623, 1625, 1629, 1635, 1628,
3013 1626, 1632, 1636, 0, 1628, 1635, 1629, 1636, 1639, 1631,
3014 1640, 1637, 1630, 1632, 1638, 1641, 1642, 1633, 1634, 1633,
3015 1637, 1634, 1643, 1638, 1644, 1635, 1645, 1650, 1651, 1636,
3016
3017 1639, 1642, 1640, 1641, 1643, 1639, 1648, 1640, 1637, 1645,
3018 1646, 1638, 1641, 1642, 1645, 1649, 1644, 1646, 1647, 1643,
3019 1652, 1644, 1656, 1645, 1650, 1647, 1652, 1649, 1648, 1656,
3020 1651, 1654, 1655, 1648, 1660, 1657, 1645, 1646, 1659, 1654,
3021 1647, 1661, 1649, 1655, 1658, 1647, 1658, 1652, 1662, 1656,
3022 1663, 1667, 1647, 1664, 1669, 1662, 1672, 1658, 1654, 1655,
3023 1657, 1660, 1657, 1665, 1659, 1659, 1666, 1670, 1661, 1665,
3024 1674, 1658, 1666, 1658, 1668, 1662, 1673, 1663, 1667, 1664,
3025 1664, 1675, 1676, 1675, 1677, 1673, 1669, 1678, 1672, 1680,
3026 1665, 1670, 1684, 1666, 1670, 1679, 0, 1668, 1692, 1687,
3027
3028 1682, 1668, 1674, 1673, 1687, 1683, 1676, 1682, 1675, 1676,
3029 1689, 1677, 1683, 1678, 1678, 1688, 1685, 1679, 1681, 1681,
3030 1681, 1680, 1679, 1685, 1684, 1681, 1691, 1682, 1688, 1696,
3031 1692, 1687, 1683, 1681, 1690, 1689, 1693, 1689, 1691, 1697,
3032 1697, 1694, 1688, 1685, 1698, 1681, 1681, 1681, 1694, 1695,
3033 1690, 1699, 1681, 1691, 1693, 1695, 1696, 1700, 1699, 1701,
3034 1702, 1690, 1700, 1693, 1706, 1703, 1697, 1707, 1694, 1707,
3035 1698, 1698, 1703, 1711, 1712, 1708, 1695, 1710, 1699, 1711,
3036 1713, 1717, 1714, 1716, 1700, 1701, 1701, 1702, 1714, 1715,
3037 1724, 1706, 1703, 1708, 1707, 1710, 1718, 1718, 1719, 1717,
3038
3039 1711, 1715, 1708, 1716, 1710, 1723, 1712, 1713, 1717, 1714,
3040 1716, 1720, 1720, 1725, 1726, 1721, 1715, 1727, 1728, 1729,
3041 1725, 1730, 1724, 1718, 1719, 1719, 1721, 1723, 1732, 1731,
3042 1734, 1733, 1723, 1739, 1726, 1732, 1735, 1740, 1720, 1733,
3043 1725, 1726, 1721, 1730, 1736, 1734, 1729, 1731, 1730, 1727,
3044 1728, 1737, 1737, 1736, 1738, 1732, 1731, 1734, 1733, 1741,
3045 1735, 1742, 1747, 1735, 1748, 1739, 1741, 1743, 1745, 1740,
3046 0, 1736, 1746, 1742, 1749, 1745, 1756, 1746, 1737, 1752,
3047 1738, 1738, 1749, 1743, 1747, 1750, 1741, 1752, 1742, 1747,
3048 1743, 1748, 1753, 1754, 1743, 1745, 1766, 1750, 1755, 1746,
3049
3050 1757, 1749, 1758, 1756, 1759, 1760, 1752, 1758, 1761, 1762,
3051 1743, 1760, 1750, 1769, 1754, 1753, 1755, 1762, 1758, 1753,
3052 1754, 1761, 1763, 1757, 1768, 1755, 1764, 1757, 1766, 1758,
3053 1765, 1759, 1760, 1764, 1758, 1761, 1762, 1765, 1767, 1771,
3054 1769, 1770, 1773, 1774, 1763, 1775, 1768, 1776, 1774, 1763,
3055 1767, 1768, 1775, 1764, 1778, 1780, 1779, 1765, 1781, 1774,
3056 1773, 1779, 1771, 1785, 1783, 1767, 1771, 1770, 1770, 1773,
3057 1774, 0, 1775, 1788, 1776, 1774, 1782, 1782, 1784, 1787,
3058 1791, 1778, 1789, 1790, 1792, 1790, 1783, 1780, 1779, 1792,
3059 1781, 1783, 1793, 1784, 1787, 1785, 1788, 1789, 1794, 1795,
3060
3061 1788, 1797, 1803, 1782, 1804, 1784, 1787, 1798, 1799, 1789,
3062 1790, 1792, 1791, 1801, 1795, 1798, 1797, 1802, 1806, 1808,
3063 1794, 1807, 0, 0, 1793, 1794, 1795, 0, 1797, 1803,
3064 1799, 1804, 1805, 1809, 1798, 1799, 1812, 1801, 1810, 1805,
3065 1801, 1808, 1807, 1802, 1802, 1814, 1808, 1815, 1807, 1816,
3066 1806, 1818, 1819, 1821, 1809, 1820, 1810, 1825, 1812, 1805,
3067 1809, 1823, 1815, 1812, 1826, 1810, 1818, 1819, 1822, 1814,
3068 1824, 1828, 1814, 1831, 1815, 1816, 1816, 1820, 1818, 1819,
3069 1821, 1825, 1820, 1823, 1825, 1830, 1822, 1827, 1823, 1828,
3070 1829, 1826, 1824, 1830, 1827, 1822, 1831, 1824, 1828, 1829,
3071
3072 1831, 1832, 1833, 1835, 1834, 1837, 1836, 0, 0, 1839,
3073 1840, 1841, 1830, 1834, 1827, 1836, 1842, 1829, 1837, 1840,
3074 1839, 1835, 1843, 1832, 1844, 1850, 1846, 1847, 1832, 1841,
3075 1835, 1834, 1837, 1836, 1833, 1839, 1839, 1840, 1841, 1844,
3076 1843, 1847, 1842, 1842, 1845, 1852, 1853, 1839, 1846, 1843,
3077 1845, 1844, 1850, 1846, 1847, 1854, 1856, 1853, 1858, 1860,
3078 1859, 1857, 0, 0, 1861, 1862, 1854, 0, 1856, 1852,
3079 1859, 1845, 1852, 1853, 1857, 1863, 1865, 0, 1868, 1866,
3080 1869, 0, 1854, 1856, 1866, 1860, 1860, 1859, 1857, 1861,
3081 1858, 1861, 1862, 1867, 1863, 1870, 1865, 1871, 1869, 1872,
3082
3083 1867, 1870, 1863, 1865, 1868, 1868, 1866, 1869, 1873, 1874,
3084 1874, 1878, 1871, 1875, 1872, 1879, 1876, 1880, 1878, 1881,
3085 1867, 1883, 1870, 1873, 1871, 1875, 1872, 1882, 1881, 1876,
3086 1879, 1884, 1885, 1887, 1882, 1873, 1874, 1876, 1878, 1885,
3087 1875, 1888, 1879, 1876, 1880, 1883, 1881, 1890, 1883, 1893,
3088 1891, 0, 1889, 1884, 1882, 1887, 1876, 1896, 1884, 1885,
3089 1887, 1889, 1895, 1897, 1903, 1899, 1888, 1893, 1888, 1890,
3090 1891, 1895, 1898, 1899, 1890, 1896, 1893, 1891, 1897, 1889,
3091 1901, 1902, 1904, 1904, 1896, 0, 1906, 1913, 1905, 1895,
3092 1897, 1903, 1899, 1909, 1902, 1907, 1908, 1898, 1911, 1898,
3093
3094 1918, 1913, 1909, 0, 1912, 1901, 1914, 1901, 1902, 1904,
3095 1905, 1906, 1910, 1906, 1913, 1905, 1916, 1907, 1908, 1910,
3096 1909, 1917, 1907, 1908, 1916, 1914, 1912, 1918, 1919, 1920,
3097 1911, 1912, 1922, 1914, 1917, 1921, 1923, 0, 0, 1910,
3098 1924, 1920, 1921, 1916, 1925, 1927, 1928, 1932, 1917, 1926,
3099 0, 1929, 1931, 1925, 1919, 1919, 1920, 1926, 1923, 1930,
3100 0, 1928, 1921, 1923, 1922, 1924, 1933, 1924, 1926, 1932,
3101 1931, 1925, 1927, 1928, 1932, 1933, 1926, 1929, 1929, 1931,
3102 1935, 1936, 1937, 1935, 1926, 1930, 1930, 1938, 1937, 1940,
3103 1942, 1943, 1938, 1933, 1939, 0, 1947, 1946, 1935, 1949,
3104
3105 1944, 0, 1948, 1947, 1940, 1942, 1936, 1935, 1936, 1937,
3106 1935, 1946, 1939, 1943, 1981, 0, 1940, 1942, 1943, 1938,
3107 1948, 1939, 1944, 1947, 1946, 1950, 1949, 1944, 1951, 1948,
3108 1952, 1953, 1956, 1954, 1950, 1957, 1958, 1951, 1961, 1959,
3109 0, 1952, 1960, 1958, 1953, 1954, 1981, 1956, 0, 1966,
3110 1957, 1970, 1950, 1970, 1964, 1951, 1961, 1952, 1953, 1956,
3111 1954, 1959, 1957, 1958, 1960, 1961, 1959, 1964, 1967, 1960,
3112 1966, 1968, 1967, 1969, 1971, 1964, 1966, 1972, 1970, 1973,
3113 1974, 1964, 1969, 1968, 1983, 1975, 1976, 0, 1977, 1978,
3114 1982, 1979, 1971, 1975, 1964, 1967, 1979, 1973, 1968, 1988,
3115
3116 1969, 1971, 1984, 1978, 1972, 1991, 1973, 1974, 1983, 1976,
3117 1977, 1983, 1975, 1976, 1980, 1977, 1978, 1985, 1979, 1980,
3118 1990, 1984, 1982, 1989, 1985, 1992, 1988, 1993, 1995, 1984,
3119 1994, 1996, 1991, 0, 2000, 1997, 1998, 1989, 1990, 1994,
3120 0, 0, 1993, 1999, 1985, 2002, 1980, 1990, 1989, 1989,
3121 1989, 1992, 1992, 1996, 1993, 2004, 0, 1994, 1996, 2008,
3122 1995, 1997, 1997, 1998, 1989, 1999, 2000, 2003, 2002, 2005,
3123 1999, 2007, 2002, 2007, 2003, 1989, 2005, 2010, 2004, 2009,
3124 2011, 2008, 2004, 2009, 2012, 2014, 2008, 2015, 2013, 2010,
3125 2016, 2017, 2014, 2012, 2003, 2016, 2005, 2018, 2007, 2013,
3126
3127 2020, 2019, 2011, 0, 2010, 0, 2009, 2011, 2022, 2015,
3128 2024, 2012, 2014, 2019, 2015, 2013, 2025, 2016, 2017, 2027,
3129 2018, 2023, 2020, 2022, 2018, 2021, 2021, 2020, 2019, 2023,
3130 2025, 2026, 2024, 2030, 2029, 2022, 2031, 2024, 2032, 2035,
3131 2026, 2030, 2032, 2025, 2031, 2035, 2027, 2033, 2023, 2034,
3132 2033, 2040, 2021, 2029, 2036, 2039, 2037, 2034, 2026, 0,
3133 2030, 2029, 2037, 2031, 2041, 2032, 2035, 2039, 2042, 2036,
3134 2043, 2047, 2044, 2045, 2033, 2046, 2034, 2048, 2040, 0,
3135 2050, 2036, 2039, 2037, 2043, 2044, 2041, 2045, 2051, 2053,
3136 2054, 2041, 2042, 2049, 2050, 2042, 2056, 2043, 2047, 2044,
3137
3138 2045, 2046, 2046, 2052, 2048, 2049, 2052, 2050, 2060, 2059,
3139 2061, 2063, 2054, 2065, 2051, 2051, 2053, 2054, 2056, 2057,
3140 2049, 2052, 2058, 2056, 2059, 2064, 2057, 2068, 2067, 2058,
3141 2052, 2062, 2066, 2052, 2064, 2060, 2059, 2061, 2063, 2062,
3142 2065, 2069, 2071, 2070, 2066, 2073, 2057, 2076, 2072, 2058,
3143 2067, 2075, 2064, 2073, 2068, 2067, 2070, 2077, 2062, 2066,
3144 2071, 2072, 2078, 2081, 2080, 2077, 2082, 2079, 2069, 2071,
3145 2070, 2083, 2073, 2075, 2076, 2072, 2079, 0, 2075, 2087,
3146 2084, 2082, 0, 2085, 2077, 2080, 2093, 2081, 2084, 2078,
3147 2081, 2080, 2082, 2082, 2079, 2085, 2086, 2090, 2083, 2091,
3148
3149 2095, 2090, 2089, 2096, 2086, 2092, 2087, 2084, 2082, 2089,
3150 2085, 2091, 2094, 2093, 2099, 2096, 2101, 0, 2100, 2097,
3151 2094, 2102, 2095, 2086, 2090, 2100, 2091, 2095, 2092, 2089,
3152 2096, 2097, 2092, 2103, 2102, 2104, 2101, 2105, 2105, 2094,
3153 2106, 2099, 2103, 2101, 2104, 2100, 2097, 2107, 2102, 2114,
3154 2108, 2114, 0, 2111, 2109, 2118, 2118, 2112, 2115, 2123,
3155 2103, 2113, 2104, 0, 2105, 2107, 2106, 2106, 2111, 2109,
3156 0, 2109, 2115, 2117, 2107, 2108, 2114, 2108, 2109, 2112,
3157 2111, 2109, 2118, 2113, 2112, 2115, 2116, 2120, 2113, 2121,
3158 2122, 2123, 2116, 2124, 2125, 2117, 2109, 2126, 2109, 2124,
3159
3160 2117, 2127, 2122, 2128, 2129, 2128, 2136, 2131, 2130, 2120,
3161 0, 2121, 2137, 2116, 2120, 2132, 2121, 2122, 2129, 2126,
3162 2124, 2133, 2134, 2127, 2126, 2131, 2125, 2142, 2127, 2138,
3163 2128, 2129, 2130, 2132, 2131, 2130, 2140, 2135, 2136, 2133,
3164 2134, 2143, 2132, 2140, 2137, 2142, 2144, 2145, 2133, 2134,
3165 2135, 0, 2138, 2146, 2142, 2145, 2138, 2151, 2147, 2149,
3166 2147, 2150, 0, 2140, 2135, 2147, 2156, 2143, 2143, 2152,
3167 2149, 2153, 2150, 2145, 2145, 2146, 2155, 2156, 2144, 2158,
3168 2146, 2152, 2145, 2157, 2151, 2147, 2149, 2147, 2150, 2153,
3169 2160, 2155, 0, 2156, 2158, 2157, 2152, 2161, 2153, 2164,
3170
3171 2162, 2163, 2167, 2155, 2165, 2170, 2158, 2162, 2168, 2171,
3172 2157, 2169, 2173, 0, 2160, 0, 2163, 2160, 2172, 2161,
3173 2175, 2174, 2180, 2179, 2161, 2176, 2164, 2162, 2163, 2167,
3174 2165, 2165, 2168, 2169, 2174, 2168, 2172, 2170, 2169, 2173,
3175 2176, 2171, 2177, 2178, 2181, 2172, 2175, 2175, 2174, 2179,
3176 2179, 2178, 2176, 2182, 2180, 2177, 2184, 2181, 2185, 2186,
3177 2188, 2189, 2187, 0, 2191, 2195, 2196, 2190, 2189, 2177,
3178 2178, 2181, 2195, 2196, 2194, 2182, 2198, 2201, 2188, 2184,
3179 2182, 2192, 2185, 2184, 2187, 2185, 2186, 2188, 2189, 2187,
3180 2190, 2191, 2195, 2196, 2190, 2192, 2194, 2197, 2199, 2198,
3181
3182 2200, 2194, 2202, 2198, 2203, 2199, 2205, 2206, 2192, 2201,
3183 2197, 2208, 2210, 2203, 2207, 2213, 0, 0, 2206, 2209,
3184 2215, 2205, 2200, 2202, 2197, 2199, 2214, 2200, 2213, 2202,
3185 2217, 2203, 2219, 2205, 2206, 2220, 2207, 2210, 2209, 2210,
3186 0, 2207, 2213, 2208, 2215, 2221, 2209, 2215, 2216, 2216,
3187 2222, 2223, 2214, 2214, 2226, 2219, 2217, 2217, 2230, 2219,
3188 2221, 2228, 2231, 0, 2234, 2235, 2235, 2220, 2236, 2223,
3189 2228, 2230, 2221, 2231, 2237, 2216, 2238, 2222, 2223, 2240,
3190 2242, 2226, 2243, 2244, 2250, 2230, 2234, 2249, 2228, 2231,
3191 2236, 2234, 2235, 2245, 2244, 2236, 2237, 2246, 2245, 2248,
3192
3193 2252, 2237, 2249, 2238, 2253, 2255, 2240, 2248, 2243, 2243,
3194 2244, 2250, 2242, 2254, 2249, 2257, 2260, 2255, 2252, 2246,
3195 2245, 2258, 2254, 2259, 2246, 2260, 2248, 2252, 2262, 2263,
3196 2264, 2259, 2255, 2266, 2269, 2265, 2253, 2267, 2268, 0,
3197 2254, 0, 2257, 2260, 2265, 2258, 0, 2269, 2258, 2272,
3198 2259, 2266, 2264, 2270, 2262, 2262, 2263, 2264, 2271, 2267,
3199 2266, 2269, 2265, 2268, 2267, 2268, 2270, 2273, 2274, 2275,
3200 2276, 2272, 2277, 2271, 2273, 2278, 2272, 2279, 2280, 2281,
3201 2270, 2282, 0, 2283, 2286, 2271, 0, 2280, 2284, 2287,
3202 2274, 2286, 2279, 2288, 2273, 2274, 2275, 2276, 2285, 2277,
3203
3204 2287, 2281, 2278, 2284, 2279, 2280, 2281, 2282, 2282, 2283,
3205 2283, 2286, 2290, 2285, 2289, 2284, 2287, 2291, 2292, 2296,
3206 2288, 2293, 2289, 2294, 0, 2285, 2296, 2295, 2298, 2297,
3207 2299, 2300, 2302, 2302, 2292, 2298, 2293, 2299, 0, 2290,
3208 0, 2289, 2295, 2294, 2291, 2292, 2296, 2301, 2293, 2304,
3209 2294, 2297, 2307, 2303, 2295, 2298, 2297, 2299, 2300, 2302,
3210 2303, 2305, 2306, 2304, 2305, 2301, 2308, 2307, 2309, 2310,
3211 2311, 2317, 2314, 0, 2301, 2306, 2304, 2314, 2313, 2307,
3212 2303, 2310, 2311, 2316, 2317, 2320, 2309, 2313, 2305, 2306,
3213 2315, 2318, 2308, 2308, 2315, 2309, 2310, 2311, 2317, 2314,
3214
3215 2319, 2321, 0, 2322, 2330, 2313, 2324, 2316, 2326, 2328,
3216 2316, 2327, 2320, 2318, 2332, 2329, 2330, 2315, 2318, 0,
3217 2327, 2332, 2319, 2329, 2338, 2328, 0, 2319, 2321, 2322,
3218 2322, 2330, 2324, 2324, 2326, 2326, 2328, 2333, 2327, 2334,
3219 2335, 2332, 2329, 2336, 2334, 2337, 2333, 2335, 2339, 2338,
3220 2340, 2338, 2337, 2341, 2344, 2339, 2342, 2347, 2345, 2340,
3221 2346, 2336, 2341, 2345, 2333, 2350, 2334, 2335, 2349, 0,
3222 2336, 0, 2337, 2353, 2359, 2339, 0, 2340, 2346, 2351,
3223 2341, 2344, 2342, 2342, 2347, 2345, 2349, 2346, 2351, 2352,
3224 2354, 2358, 2350, 2353, 2355, 2349, 2356, 2357, 2352, 2358,
3225
3226 2353, 2359, 2354, 2355, 2360, 2356, 2351, 2361, 2357, 2362,
3227 2363, 2366, 2365, 2364, 2452, 2367, 2352, 2354, 2358, 2363,
3228 2365, 2355, 2367, 2356, 2357, 2364, 2369, 2370, 2368, 2371,
3229 0, 2360, 2372, 2366, 2361, 2368, 2373, 2363, 2366, 2365,
3230 2364, 2362, 2367, 2375, 2377, 2379, 2452, 2381, 2369, 0,
3231 2378, 2375, 2370, 2369, 2370, 2368, 2371, 2372, 2378, 2372,
3232 2379, 2380, 2377, 2373, 2388, 2387, 2382, 2383, 2380, 2381,
3233 2375, 2377, 2379, 2382, 2381, 2383, 2386, 2378, 2389, 2391,
3234 2396, 2392, 0, 2386, 2394, 2397, 2390, 2395, 2380, 2387,
3235 2389, 2388, 2387, 2382, 2383, 2390, 2394, 2399, 2402, 2397,
3236
3237 2405, 2407, 2404, 2386, 2392, 2389, 2391, 2396, 2392, 2399,
3238 2395, 2394, 2397, 2390, 2395, 2400, 2401, 2404, 2405, 2409,
3239 2411, 2406, 2400, 2401, 2399, 2402, 2408, 2405, 2407, 2404,
3240 2410, 2414, 0, 2419, 2408, 2420, 2413, 2421, 2411, 2412,
3241 2420, 2422, 2400, 2401, 2406, 0, 2409, 2411, 2406, 2424,
3242 2412, 2413, 2410, 2408, 2425, 2422, 2423, 2410, 2414, 2419,
3243 2419, 2426, 2420, 2413, 2421, 2427, 2412, 2424, 2422, 2429,
3244 2423, 2432, 2425, 2433, 2434, 2435, 2424, 2427, 2437, 2441,
3245 2436, 2425, 2442, 2423, 0, 2438, 2437, 2434, 2426, 2439,
3246 2445, 2441, 2427, 2432, 2446, 2433, 2429, 2435, 2432, 2436,
3247
3248 2433, 2434, 2435, 2438, 2442, 2437, 2441, 2436, 2439, 2442,
3249 2443, 2444, 2438, 2447, 2448, 0, 2439, 2445, 2450, 2451,
3250 2449, 2446, 2453, 2444, 2454, 2457, 2456, 2450, 2451, 2458,
3251 2462, 2455, 2443, 2468, 2448, 2463, 0, 2443, 2444, 2465,
3252 2447, 2448, 2449, 2455, 2453, 2450, 2451, 2449, 2456, 2453,
3253 2454, 2454, 2457, 2456, 2461, 2464, 2458, 2462, 2455, 2463,
3254 2464, 2465, 2463, 2466, 2467, 2468, 2465, 2470, 2461, 2469,
3255 2471, 2472, 2474, 2475, 2473, 2476, 2481, 2467, 2474, 0,
3256 0, 2461, 2477, 2472, 2480, 2466, 2485, 2464, 2471, 2470,
3257 2466, 2467, 2469, 2473, 2470, 2478, 2469, 2471, 2472, 2474,
3258
3259 2481, 2473, 2483, 2481, 2477, 2475, 2480, 2476, 2485, 2477,
3260 2478, 2480, 2486, 2485, 2487, 2489, 2488, 2483, 2490, 0,
3261 2491, 2497, 2478, 2487, 2496, 2499, 2492, 2498, 2497, 2483,
3262 2488, 2503, 2496, 2489, 2486, 2498, 2490, 2501, 2502, 2486,
3263 0, 2487, 2489, 2488, 2492, 2490, 2491, 2491, 2497, 2500,
3264 2502, 2496, 2499, 2492, 2498, 2501, 2506, 2500, 2503, 2504,
3265 2510, 2509, 2508, 2512, 2501, 2502, 2513, 2504, 2506, 2508,
3266 2511, 2514, 2511, 2515, 2516, 0, 2500, 2517, 2519, 2522,
3267 2520, 0, 2527, 2506, 2509, 2526, 2504, 2510, 2509, 2508,
3268 2528, 2527, 2529, 2516, 2520, 2512, 2519, 2511, 2513, 2517,
3269
3270 2515, 2516, 2522, 2514, 2517, 2519, 2522, 2520, 2523, 2527,
3271 2524, 2526, 2526, 2531, 2533, 2532, 2535, 2528, 2537, 2529,
3272 2542, 2523, 2524, 2540, 2538, 2537, 2543, 2542, 2540, 2539,
3273 2545, 2546, 0, 0, 2548, 2523, 2533, 2524, 2532, 2547,
3274 2531, 2533, 2532, 2535, 2539, 2537, 2538, 2542, 2548, 2553,
3275 2550, 2538, 2543, 2543, 2554, 2540, 2539, 2545, 2546, 2550,
3276 2552, 2548, 2555, 2547, 2557, 2558, 2547, 2552, 2561, 2559,
3277 2556, 2560, 2562, 0, 0, 2572, 2553, 2550, 2559, 2558,
3278 2554, 2554, 2556, 2563, 2560, 2567, 2569, 2552, 2570, 2555,
3279 2567, 2557, 2558, 2569, 2575, 2570, 2559, 2556, 2560, 2562,
3280
3281 2561, 2568, 2571, 2574, 0, 2568, 2563, 2572, 2580, 2573,
3282 2563, 2573, 2578, 2569, 2581, 2570, 2583, 2567, 2583, 2585,
3283 2584, 2575, 0, 2571, 2590, 2591, 2574, 2580, 2568, 2571,
3284 2574, 2587, 2586, 2586, 2578, 2580, 2573, 2590, 2581, 2578,
3285 2588, 2581, 2586, 2583, 2584, 2585, 2585, 2584, 2589, 2588,
3286 2592, 2590, 2591, 2587, 2593, 2589, 2594, 2595, 2587, 2586,
3287 2586, 2596, 2593, 2592, 2598, 2595, 2597, 2588, 2599, 2594,
3288 2600, 2597, 2598, 2601, 2604, 2589, 2602, 2592, 2593, 2603,
3289 2596, 2593, 2605, 2594, 2595, 2604, 2606, 2609, 2596, 2593,
3290 2612, 2598, 2608, 2606, 2609, 2599, 2600, 2600, 2597, 2601,
3291
3292 2601, 2604, 2602, 2602, 2605, 2603, 2603, 2607, 2607, 2605,
3293 2608, 2610, 2613, 2606, 2609, 2614, 2616, 2612, 2610, 2608,
3294 2617, 2618, 2619, 2621, 2614, 2627, 2626, 2622, 2623, 0,
3295 0, 0, 0, 2624, 2607, 2626, 2613, 0, 2610, 2613,
3296 2617, 2628, 2614, 2616, 2619, 2622, 2623, 2617, 2618, 2619,
3297 2621, 2624, 2627, 2626, 2622, 2623, 2629, 2630, 2631, 2632,
3298 2624, 2633, 2634, 2631, 2628, 2638, 2639, 2641, 2628, 2630,
3299 2643, 2644, 2643, 2632, 2629, 2653, 0, 2646, 2642, 2633,
3300 2644, 2647, 2651, 2629, 2630, 2634, 2632, 2638, 2633, 2634,
3301 2631, 2642, 2638, 2639, 2641, 2646, 2647, 2643, 2644, 2650,
3302
3303 2651, 2650, 2655, 2652, 2646, 2642, 2657, 2653, 2647, 2651,
3304 2652, 2661, 2657, 2659, 2660, 0, 2662, 2655, 2665, 2667,
3305 2664, 2665, 2668, 2669, 2671, 0, 2650, 0, 0, 2655,
3306 2652, 2671, 2673, 2657, 2662, 2659, 2660, 2661, 2661, 2670,
3307 2659, 2660, 2664, 2662, 2665, 2665, 2667, 2664, 2665, 2668,
3308 2669, 2671, 2672, 2675, 2673, 2676, 2677, 2670, 0, 2673,
3309 2672, 2678, 2679, 2681, 2682, 2680, 2670, 2683, 2684, 2681,
3310 2685, 2679, 2685, 0, 2686, 2688, 2683, 2676, 2677, 2672,
3311 2680, 2689, 2676, 2677, 2690, 2675, 2682, 2691, 2678, 2679,
3312 2681, 2682, 2680, 2693, 2683, 2696, 2692, 2685, 2688, 2701,
3313
3314 2684, 2686, 2688, 2689, 2692, 2693, 2690, 2698, 2689, 2694,
3315 2699, 2690, 2700, 2691, 2691, 2707, 2694, 2701, 2702, 2703,
3316 2693, 2698, 2696, 2692, 2699, 2704, 2701, 2703, 2705, 2702,
3317 2706, 2706, 2708, 2710, 2698, 2700, 2694, 2699, 2711, 2700,
3318 2708, 2713, 2707, 2715, 2704, 2702, 2703, 2713, 2722, 2720,
3319 2705, 2717, 2704, 2718, 2723, 2705, 2719, 2706, 2725, 2708,
3320 2710, 2723, 2717, 2727, 2718, 2711, 2725, 2719, 2713, 2724,
3321 2715, 2720, 2730, 2724, 2728, 2722, 2720, 2734, 2717, 2733,
3322 2718, 2723, 2744, 2719, 2729, 2725, 2733, 2728, 2735, 2727,
3323 2727, 2737, 2729, 2736, 2738, 2739, 2724, 2740, 2736, 2730,
3324
3325 2743, 2728, 2739, 2741, 2745, 2742, 2733, 2743, 2748, 2734,
3326 2735, 2729, 2745, 2746, 2744, 2735, 2740, 2749, 2737, 2741,
3327 2736, 2738, 2739, 2742, 2740, 2750, 2747, 2743, 2746, 2755,
3328 2741, 2745, 2742, 2747, 2754, 2748, 2755, 2756, 2757, 2758,
3329 2746, 2749, 2759, 2740, 2749, 2760, 2762, 2766, 2763, 2754,
3330 0, 2750, 2750, 2747, 2760, 2764, 2755, 2768, 2772, 2765,
3331 2772, 2754, 2774, 2758, 0, 2757, 2758, 2765, 2762, 2756,
3332 2767, 2767, 2760, 2762, 2759, 2763, 2770, 2764, 2771, 2766,
3333 2767, 2773, 2764, 2776, 2768, 2772, 2765, 2771, 2775, 2774,
3334 2778, 2770, 2779, 2781, 2780, 2773, 2775, 2767, 2767, 2783,
3335
3336 2782, 2776, 2784, 2770, 2785, 2771, 2781, 2788, 2773, 2793,
3337 2776, 2786, 2798, 2794, 2793, 2775, 2780, 2778, 2794, 2779,
3338 2781, 2780, 2782, 2795, 2791, 2801, 2783, 2782, 2795, 2784,
3339 2796, 2785, 2791, 2786, 2788, 2799, 2793, 2800, 2786, 2798,
3340 2794, 2802, 2803, 2801, 2800, 2805, 2806, 2807, 2799, 2808,
3341 2795, 2791, 2801, 2806, 2811, 2807, 2796, 2796, 2813, 2815,
3342 2814, 2816, 2799, 2817, 2800, 2818, 0, 2819, 2802, 2803,
3343 0, 2808, 2815, 2806, 2807, 2820, 2808, 2805, 2817, 2824,
3344 2828, 2811, 2814, 2825, 2818, 2813, 2815, 2814, 2822, 2823,
3345 2817, 2826, 2818, 2816, 2819, 2822, 2823, 2820, 2825, 2828,
3346
3347 2829, 2824, 2820, 2836, 2830, 2833, 2824, 2828, 2829, 2836,
3348 2825, 2830, 2826, 2831, 2833, 2822, 2823, 2834, 2826, 2837,
3349 2831, 2839, 2840, 2835, 2835, 2841, 2848, 2829, 2834, 2840,
3350 2836, 2830, 2833, 2835, 2842, 2844, 2849, 2850, 2845, 2854,
3351 2831, 2837, 2844, 2839, 2834, 2856, 2837, 2860, 2839, 2840,
3352 2835, 2835, 2845, 2848, 2857, 2857, 2842, 2841, 2858, 2858,
3353 2850, 2842, 2844, 2849, 2850, 2845, 2854, 2859, 2859, 0,
3354 2860, 2862, 2856, 2863, 2860, 2864, 2870, 2867, 2868, 2869,
3355 2877, 2876, 2863, 2857, 2867, 2868, 2875, 2858, 2864, 2873,
3356 2874, 2873, 2877, 0, 2880, 2882, 2859, 2881, 2862, 2876,
3357
3358 2863, 2869, 2864, 2870, 2867, 2868, 2869, 2877, 2876, 2875,
3359 2874, 2879, 2880, 2875, 2883, 2884, 2873, 2874, 2885, 2888,
3360 2879, 2880, 2882, 2881, 2881, 2886, 2887, 2884, 2886, 2891,
3361 2889, 2887, 2889, 2895, 2890, 2891, 2896, 2892, 2879, 0,
3362 2885, 2883, 2884, 2886, 2893, 2885, 2890, 2898, 2897, 2899,
3363 2900, 2888, 2886, 2903, 2894, 2886, 2891, 2889, 2887, 2892,
3364 2895, 2890, 2894, 2906, 2892, 2907, 2893, 2908, 2896, 2897,
3365 2909, 2893, 2900, 2910, 2898, 2897, 2899, 2900, 2911, 2912,
3366 2903, 2894, 2915, 2914, 2916, 2921, 2918, 2920, 2917, 0,
3367 2906, 0, 2907, 2918, 2908, 2920, 2922, 2909, 2925, 2927,
3368
3369 2910, 2914, 2916, 2917, 2923, 2911, 2912, 2924, 2922, 2915,
3370 2914, 2916, 2921, 2918, 2920, 2917, 2926, 2931, 2923, 2933,
3371 2930, 2934, 2924, 2922, 2925, 2925, 2927, 2936, 2926, 2930,
3372 2934, 2923, 2932, 2932, 2924, 2937, 2938, 0, 2939, 2945,
3373 0, 2931, 2940, 2926, 2931, 2933, 2933, 2930, 2934, 2938,
3374 2940, 2936, 2941, 2942, 2936, 2944, 2948, 2945, 2959, 2932,
3375 2939, 2941, 2957, 2938, 2942, 2939, 2945, 2937, 2948, 2940,
3376 2960, 2961, 2959, 2962, 2964, 2965, 2944, 0, 2964, 2941,
3377 2942, 2966, 2944, 2948, 2967, 2959, 2957, 2972, 2970, 2957,
3378 2968, 2967, 2970, 2965, 2971, 2973, 2979, 2960, 2961, 2975,
3379
3380 2962, 2964, 2965, 2968, 2966, 2976, 2974, 2979, 2966, 2972,
3381 2971, 2967, 0, 2982, 2972, 2970, 2977, 2968, 2974, 2976,
3382 2973, 2971, 2973, 2979, 2977, 2975, 2975, 2978, 2980, 2981,
3383 2980, 2982, 2976, 2974, 2983, 2985, 2978, 2986, 2984, 2990,
3384 2982, 2981, 2985, 2977, 2984, 2992, 2991, 2994, 2996, 2983,
3385 2993, 2997, 2990, 2991, 2978, 2980, 2981, 2995, 3000, 2986,
3386 2999, 2983, 2985, 2998, 2986, 2984, 2990, 2999, 2993, 3001,
3387 3002, 2998, 2992, 2991, 2994, 2996, 3004, 2993, 2997, 3003,
3388 3005, 3003, 3000, 2995, 2995, 3000, 3006, 2999, 3004, 3007,
3389 2998, 3001, 3002, 3008, 3009, 3010, 3001, 3002, 3011, 3006,
3390
3391 3012, 3009, 3013, 3004, 3007, 3015, 3003, 3020, 3012, 3017,
3392 3011, 3021, 3005, 3006, 3022, 3008, 3007, 3015, 3017, 3024,
3393 3008, 3009, 3010, 3023, 3025, 3011, 3026, 3012, 3027, 3013,
3394 3029, 3023, 3015, 3022, 3020, 3028, 3017, 3021, 3021, 3026,
3395 3030, 3022, 3027, 3028, 3031, 3037, 3036, 3040, 3033, 0,
3396 3023, 3024, 3029, 3026, 3033, 3027, 3025, 3029, 3034, 3036,
3397 0, 3045, 3028, 3039, 3042, 3034, 3043, 3030, 3037, 3040,
3398 3039, 3031, 3037, 3036, 3040, 3033, 3041, 3046, 3042, 3044,
3399 3043, 3047, 3050, 3045, 3041, 3034, 3051, 3044, 3045, 3050,
3400 3039, 3042, 3052, 3043, 3053, 3051, 3054, 3055, 3056, 3046,
3401
3402 3052, 3063, 0, 3041, 3046, 3057, 3044, 0, 3047, 3050,
3403 3061, 3058, 3059, 3051, 3060, 0, 3065, 3067, 3054, 3052,
3404 3072, 3053, 3060, 3054, 3056, 3056, 3064, 3057, 3063, 3055,
3405 3069, 3078, 3057, 3058, 3059, 3074, 0, 3068, 3058, 3059,
3406 3067, 3060, 3061, 3065, 3067, 3068, 3070, 3071, 3064, 3074,
3407 3069, 3073, 3072, 3064, 3070, 3071, 3076, 3069, 3078, 3073,
3408 0, 3081, 3074, 3079, 3068, 3080, 3079, 3082, 0, 3081,
3409 3083, 0, 3084, 3070, 3071, 3082, 3089, 3086, 3073, 3085,
3410 3096, 3079, 3076, 3076, 3083, 3088, 3088, 3080, 3081, 3091,
3411 3079, 3086, 3080, 3079, 3082, 3092, 3093, 3083, 3084, 3084,
3412
3413 3090, 3085, 3089, 3089, 3086, 3094, 3085, 3096, 3090, 3095,
3414 3098, 3097, 3088, 3099, 3100, 3091, 3091, 3095, 3093, 3101,
3415 3102, 3092, 3092, 3093, 3106, 3094, 3103, 3090, 3102, 3113,
3416 0, 3115, 3094, 3097, 3100, 3098, 3095, 3098, 3097, 3101,
3417 3099, 3100, 3104, 3109, 3107, 3110, 3101, 3102, 3103, 3111,
3418 3104, 3106, 3107, 3103, 3112, 3113, 3113, 3111, 3115, 3118,
3419 3116, 3119, 3112, 3120, 3122, 3109, 3117, 3110, 3116, 3104,
3420 3109, 3107, 3110, 3123, 3117, 3124, 3111, 3126, 3132, 3129,
3421 3133, 3112, 0, 3120, 3130, 3118, 3118, 3116, 3119, 3131,
3422 3120, 3122, 3130, 3117, 0, 3124, 0, 3131, 0, 3126,
3423
3424 3123, 3129, 3124, 0, 3126, 3132, 3129, 3133, 0, 0,
3425 0, 3130, 0, 0, 0, 0, 3131, 3137, 3137, 3137,
3426 3137, 3137, 3137, 3137, 3138, 3138, 3138, 3138, 3138, 3138,
3427 3138, 3139, 3139, 3139, 3139, 3139, 3139, 3139, 3140, 3140,
3428 3140, 3140, 3140, 3140, 3140, 3141, 3141, 3141, 3141, 3141,
3429 3141, 3141, 3142, 3142, 3142, 3142, 3142, 3142, 3142, 3143,
3430 3143, 3143, 3143, 3143, 3143, 3143, 3145, 3145, 0, 3145,
3431 3145, 3145, 3145, 3146, 3146, 0, 0, 0, 3146, 3146,
3432 3147, 3147, 0, 0, 3147, 0, 3147, 3148, 0, 0,
3433 0, 0, 0, 3148, 3149, 3149, 0, 0, 0, 3149,
3434
3435 3149, 3150, 0, 0, 0, 0, 0, 3150, 3151, 3151,
3436 0, 3151, 3151, 3151, 3151, 3152, 0, 0, 0, 0,
3437 0, 3152, 3153, 3153, 0, 0, 0, 3153, 3153, 3154,
3438 3154, 0, 3154, 3154, 3154, 3154, 3136, 3136, 3136, 3136,
3439 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
3440 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
3441 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
3442 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
3443 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
3444 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136, 3136,
3445
3446 3136, 3136, 3136
32943447 } ;
32953448
32963449 static yy_state_type yy_last_accepting_state;
33573510 int line;
33583511 YY_BUFFER_STATE buffer;
33593512 struct inc_state* next;
3513 int inc_toplevel;
33603514 };
33613515 static struct inc_state* config_include_stack = NULL;
33623516 static int inc_depth = 0;
33633517 static int inc_prev = 0;
33643518 static int num_args = 0;
3519 static int inc_toplevel = 0;
33653520
33663521 void init_cfg_parse(void)
33673522 {
33693524 inc_depth = 0;
33703525 inc_prev = 0;
33713526 num_args = 0;
3527 inc_toplevel = 0;
33723528 }
33733529
3374 static void config_start_include(const char* filename)
3530 static void config_start_include(const char* filename, int toplevel)
33753531 {
33763532 FILE *input;
33773533 struct inc_state* s;
33783534 char* nm;
3379 if(inc_depth++ > 100000) {
3535 if(inc_depth+1 > 100000) {
33803536 ub_c_error_msg("too many include files");
33813537 return;
33823538 }
34083564 return;
34093565 }
34103566 LEXOUT(("switch_to_include_file(%s)\n", filename));
3567 inc_depth++;
34113568 s->filename = cfg_parser->filename;
34123569 s->line = cfg_parser->line;
34133570 s->buffer = YY_CURRENT_BUFFER;
3571 s->inc_toplevel = inc_toplevel;
34143572 s->next = config_include_stack;
34153573 config_include_stack = s;
34163574 cfg_parser->filename = nm;
34173575 cfg_parser->line = 1;
3576 inc_toplevel = toplevel;
34183577 yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE));
34193578 }
34203579
3421 static void config_start_include_glob(const char* filename)
3580 static void config_start_include_glob(const char* filename, int toplevel)
34223581 {
34233582
34243583 /* check for wildcards */
34513610 globfree(&g);
34523611 if(r == GLOB_NOMATCH)
34533612 return; /* no matches for pattern */
3454 config_start_include(filename); /* let original deal with it */
3613 config_start_include(filename, toplevel); /* let original deal with it */
34553614 return;
34563615 }
34573616 /* process files found, if any */
34583617 for(i=(int)g.gl_pathc-1; i>=0; i--) {
3459 config_start_include(g.gl_pathv[i]);
3618 config_start_include(g.gl_pathv[i], toplevel);
34603619 }
34613620 globfree(&g);
34623621 return;
34633622 }
34643623 #endif /* HAVE_GLOB */
34653624
3466 config_start_include(filename);
3625 config_start_include(filename, toplevel);
34673626 }
34683627
34693628 static void config_end_include(void)
34773636 yy_delete_buffer(YY_CURRENT_BUFFER);
34783637 yy_switch_to_buffer(s->buffer);
34793638 config_include_stack = s->next;
3639 inc_toplevel = s->inc_toplevel;
34803640 free(s);
34813641 }
34823642
34893649 }
34903650 #endif
34913651
3492 #line 3491 "<stdout>"
3652 #line 3651 "<stdout>"
34933653 #define YY_NO_INPUT 1
3494 #line 184 "util/configlexer.lex"
3654 #line 191 "util/configlexer.lex"
34953655 #ifndef YY_NO_UNPUT
34963656 #define YY_NO_UNPUT 1
34973657 #endif
34983658 #ifndef YY_NO_INPUT
34993659 #define YY_NO_INPUT 1
35003660 #endif
3501 #line 3500 "<stdout>"
3502
3503 #line 3502 "<stdout>"
3661 #line 3660 "<stdout>"
3662
3663 #line 3662 "<stdout>"
35043664
35053665 #define INITIAL 0
35063666 #define quotedstring 1
35083668 #define include 3
35093669 #define include_quoted 4
35103670 #define val 5
3671 #define include_toplevel 6
3672 #define include_toplevel_quoted 7
35113673
35123674 #ifndef YY_NO_UNISTD_H
35133675 /* Special case for "unistd.h", since it is non-ANSI. We include it way
37203882 }
37213883
37223884 {
3723 #line 204 "util/configlexer.lex"
3724
3725 #line 3724 "<stdout>"
3885 #line 211 "util/configlexer.lex"
3886
3887 #line 3886 "<stdout>"
37263888
37273889 while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
37283890 {
37553917 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
37563918 {
37573919 yy_current_state = (int) yy_def[yy_current_state];
3758 if ( yy_current_state >= 2986 )
3920 if ( yy_current_state >= 3137 )
37593921 yy_c = yy_meta[yy_c];
37603922 }
37613923 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
37623924 ++yy_cp;
37633925 }
3764 while ( yy_base[yy_current_state] != 8475 );
3926 while ( yy_base[yy_current_state] != 8937 );
37653927
37663928 yy_find_action:
37673929 yy_act = yy_accept[yy_current_state];
37873949
37883950 case 1:
37893951 YY_RULE_SETUP
3790 #line 205 "util/configlexer.lex"
3952 #line 212 "util/configlexer.lex"
37913953 {
37923954 LEXOUT(("SP ")); /* ignore */ }
37933955 YY_BREAK
37943956 case 2:
37953957 YY_RULE_SETUP
3796 #line 207 "util/configlexer.lex"
3958 #line 214 "util/configlexer.lex"
37973959 {
37983960 /* note that flex makes the longest match and '.' is any but not nl */
37993961 LEXOUT(("comment(%s) ", yytext)); /* ignore */ }
38003962 YY_BREAK
38013963 case 3:
38023964 YY_RULE_SETUP
3803 #line 210 "util/configlexer.lex"
3965 #line 217 "util/configlexer.lex"
38043966 { YDVAR(0, VAR_SERVER) }
38053967 YY_BREAK
38063968 case 4:
38073969 YY_RULE_SETUP
3808 #line 211 "util/configlexer.lex"
3970 #line 218 "util/configlexer.lex"
38093971 { YDVAR(1, VAR_QNAME_MINIMISATION) }
38103972 YY_BREAK
38113973 case 5:
38123974 YY_RULE_SETUP
3813 #line 212 "util/configlexer.lex"
3975 #line 219 "util/configlexer.lex"
38143976 { YDVAR(1, VAR_QNAME_MINIMISATION_STRICT) }
38153977 YY_BREAK
38163978 case 6:
38173979 YY_RULE_SETUP
3818 #line 213 "util/configlexer.lex"
3980 #line 220 "util/configlexer.lex"
38193981 { YDVAR(1, VAR_NUM_THREADS) }
38203982 YY_BREAK
38213983 case 7:
38223984 YY_RULE_SETUP
3823 #line 214 "util/configlexer.lex"
3985 #line 221 "util/configlexer.lex"
38243986 { YDVAR(1, VAR_VERBOSITY) }
38253987 YY_BREAK
38263988 case 8:
38273989 YY_RULE_SETUP
3828 #line 215 "util/configlexer.lex"
3990 #line 222 "util/configlexer.lex"
38293991 { YDVAR(1, VAR_PORT) }
38303992 YY_BREAK
38313993 case 9:
38323994 YY_RULE_SETUP
3833 #line 216 "util/configlexer.lex"
3995 #line 223 "util/configlexer.lex"
38343996 { YDVAR(1, VAR_OUTGOING_RANGE) }
38353997 YY_BREAK
38363998 case 10:
38373999 YY_RULE_SETUP
3838 #line 217 "util/configlexer.lex"
4000 #line 224 "util/configlexer.lex"
38394001 { YDVAR(1, VAR_OUTGOING_PORT_PERMIT) }
38404002 YY_BREAK
38414003 case 11:
38424004 YY_RULE_SETUP
3843 #line 218 "util/configlexer.lex"
4005 #line 225 "util/configlexer.lex"
38444006 { YDVAR(1, VAR_OUTGOING_PORT_AVOID) }
38454007 YY_BREAK
38464008 case 12:
38474009 YY_RULE_SETUP
3848 #line 219 "util/configlexer.lex"
4010 #line 226 "util/configlexer.lex"
38494011 { YDVAR(1, VAR_OUTGOING_NUM_TCP) }
38504012 YY_BREAK
38514013 case 13:
38524014 YY_RULE_SETUP
3853 #line 220 "util/configlexer.lex"
4015 #line 227 "util/configlexer.lex"
38544016 { YDVAR(1, VAR_INCOMING_NUM_TCP) }
38554017 YY_BREAK
38564018 case 14:
38574019 YY_RULE_SETUP
3858 #line 221 "util/configlexer.lex"
4020 #line 228 "util/configlexer.lex"
38594021 { YDVAR(1, VAR_DO_IP4) }
38604022 YY_BREAK
38614023 case 15:
38624024 YY_RULE_SETUP
3863 #line 222 "util/configlexer.lex"
4025 #line 229 "util/configlexer.lex"
38644026 { YDVAR(1, VAR_DO_IP6) }
38654027 YY_BREAK
38664028 case 16:
38674029 YY_RULE_SETUP
3868 #line 223 "util/configlexer.lex"
4030 #line 230 "util/configlexer.lex"
4031 { YDVAR(1, VAR_PREFER_IP4) }
4032 YY_BREAK
4033 case 17:
4034 YY_RULE_SETUP
4035 #line 231 "util/configlexer.lex"
38694036 { YDVAR(1, VAR_PREFER_IP6) }
38704037 YY_BREAK
3871 case 17:
3872 YY_RULE_SETUP
3873 #line 224 "util/configlexer.lex"
4038 case 18:
4039 YY_RULE_SETUP
4040 #line 232 "util/configlexer.lex"
38744041 { YDVAR(1, VAR_DO_UDP) }
38754042 YY_BREAK
3876 case 18:
3877 YY_RULE_SETUP
3878 #line 225 "util/configlexer.lex"
4043 case 19:
4044 YY_RULE_SETUP
4045 #line 233 "util/configlexer.lex"
38794046 { YDVAR(1, VAR_DO_TCP) }
38804047 YY_BREAK
3881 case 19:
3882 YY_RULE_SETUP
3883 #line 226 "util/configlexer.lex"
4048 case 20:
4049 YY_RULE_SETUP
4050 #line 234 "util/configlexer.lex"
38844051 { YDVAR(1, VAR_TCP_UPSTREAM) }
38854052 YY_BREAK
3886 case 20:
3887 YY_RULE_SETUP
3888 #line 227 "util/configlexer.lex"
4053 case 21:
4054 YY_RULE_SETUP
4055 #line 235 "util/configlexer.lex"
38894056 { YDVAR(1, VAR_TCP_MSS) }
38904057 YY_BREAK
3891 case 21:
3892 YY_RULE_SETUP
3893 #line 228 "util/configlexer.lex"
4058 case 22:
4059 YY_RULE_SETUP
4060 #line 236 "util/configlexer.lex"
38944061 { YDVAR(1, VAR_OUTGOING_TCP_MSS) }
38954062 YY_BREAK
3896 case 22:
3897 YY_RULE_SETUP
3898 #line 229 "util/configlexer.lex"
4063 case 23:
4064 YY_RULE_SETUP
4065 #line 237 "util/configlexer.lex"
38994066 { YDVAR(1, VAR_TCP_IDLE_TIMEOUT) }
39004067 YY_BREAK
3901 case 23:
3902 YY_RULE_SETUP
3903 #line 230 "util/configlexer.lex"
4068 case 24:
4069 YY_RULE_SETUP
4070 #line 238 "util/configlexer.lex"
39044071 { YDVAR(1, VAR_EDNS_TCP_KEEPALIVE) }
39054072 YY_BREAK
3906 case 24:
3907 YY_RULE_SETUP
3908 #line 231 "util/configlexer.lex"
4073 case 25:
4074 YY_RULE_SETUP
4075 #line 239 "util/configlexer.lex"
39094076 { YDVAR(1, VAR_EDNS_TCP_KEEPALIVE_TIMEOUT) }
39104077 YY_BREAK
3911 case 25:
3912 YY_RULE_SETUP
3913 #line 232 "util/configlexer.lex"
4078 case 26:
4079 YY_RULE_SETUP
4080 #line 240 "util/configlexer.lex"
39144081 { YDVAR(1, VAR_SSL_UPSTREAM) }
39154082 YY_BREAK
3916 case 26:
3917 YY_RULE_SETUP
3918 #line 233 "util/configlexer.lex"
4083 case 27:
4084 YY_RULE_SETUP
4085 #line 241 "util/configlexer.lex"
39194086 { YDVAR(1, VAR_SSL_UPSTREAM) }
39204087 YY_BREAK
3921 case 27:
3922 YY_RULE_SETUP
3923 #line 234 "util/configlexer.lex"
4088 case 28:
4089 YY_RULE_SETUP
4090 #line 242 "util/configlexer.lex"
39244091 { YDVAR(1, VAR_SSL_SERVICE_KEY) }
39254092 YY_BREAK
3926 case 28:
3927 YY_RULE_SETUP
3928 #line 235 "util/configlexer.lex"
4093 case 29:
4094 YY_RULE_SETUP
4095 #line 243 "util/configlexer.lex"
39294096 { YDVAR(1, VAR_SSL_SERVICE_KEY) }
39304097 YY_BREAK
3931 case 29:
3932 YY_RULE_SETUP
3933 #line 236 "util/configlexer.lex"
4098 case 30:
4099 YY_RULE_SETUP
4100 #line 244 "util/configlexer.lex"
39344101 { YDVAR(1, VAR_SSL_SERVICE_PEM) }
39354102 YY_BREAK
3936 case 30:
3937 YY_RULE_SETUP
3938 #line 237 "util/configlexer.lex"
4103 case 31:
4104 YY_RULE_SETUP
4105 #line 245 "util/configlexer.lex"
39394106 { YDVAR(1, VAR_SSL_SERVICE_PEM) }
39404107 YY_BREAK
3941 case 31:
3942 YY_RULE_SETUP
3943 #line 238 "util/configlexer.lex"
4108 case 32:
4109 YY_RULE_SETUP
4110 #line 246 "util/configlexer.lex"
39444111 { YDVAR(1, VAR_SSL_PORT) }
39454112 YY_BREAK
3946 case 32:
3947 YY_RULE_SETUP
3948 #line 239 "util/configlexer.lex"
4113 case 33:
4114 YY_RULE_SETUP
4115 #line 247 "util/configlexer.lex"
39494116 { YDVAR(1, VAR_SSL_PORT) }
39504117 YY_BREAK
3951 case 33:
3952 YY_RULE_SETUP
3953 #line 240 "util/configlexer.lex"
4118 case 34:
4119 YY_RULE_SETUP
4120 #line 248 "util/configlexer.lex"
39544121 { YDVAR(1, VAR_TLS_CERT_BUNDLE) }
39554122 YY_BREAK
3956 case 34:
3957 YY_RULE_SETUP
3958 #line 241 "util/configlexer.lex"
4123 case 35:
4124 YY_RULE_SETUP
4125 #line 249 "util/configlexer.lex"
39594126 { YDVAR(1, VAR_TLS_CERT_BUNDLE) }
39604127 YY_BREAK
3961 case 35:
3962 YY_RULE_SETUP
3963 #line 242 "util/configlexer.lex"
4128 case 36:
4129 YY_RULE_SETUP
4130 #line 250 "util/configlexer.lex"
39644131 { YDVAR(1, VAR_TLS_WIN_CERT) }
39654132 YY_BREAK
3966 case 36:
3967 YY_RULE_SETUP
3968 #line 243 "util/configlexer.lex"
4133 case 37:
4134 YY_RULE_SETUP
4135 #line 251 "util/configlexer.lex"
39694136 { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
39704137 YY_BREAK
3971 case 37:
3972 YY_RULE_SETUP
3973 #line 244 "util/configlexer.lex"
4138 case 38:
4139 YY_RULE_SETUP
4140 #line 252 "util/configlexer.lex"
39744141 { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
39754142 YY_BREAK
3976 case 38:
3977 YY_RULE_SETUP
3978 #line 245 "util/configlexer.lex"
4143 case 39:
4144 YY_RULE_SETUP
4145 #line 253 "util/configlexer.lex"
39794146 { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
39804147 YY_BREAK
3981 case 39:
3982 YY_RULE_SETUP
3983 #line 246 "util/configlexer.lex"
4148 case 40:
4149 YY_RULE_SETUP
4150 #line 254 "util/configlexer.lex"
39844151 { YDVAR(1, VAR_TLS_ADDITIONAL_PORT) }
39854152 YY_BREAK
3986 case 40:
3987 YY_RULE_SETUP
3988 #line 247 "util/configlexer.lex"
4153 case 41:
4154 YY_RULE_SETUP
4155 #line 255 "util/configlexer.lex"
39894156 { YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) }
39904157 YY_BREAK
3991 case 41:
3992 YY_RULE_SETUP
3993 #line 248 "util/configlexer.lex"
4158 case 42:
4159 YY_RULE_SETUP
4160 #line 256 "util/configlexer.lex"
39944161 { YDVAR(1, VAR_TLS_CIPHERS) }
39954162 YY_BREAK
3996 case 42:
3997 YY_RULE_SETUP
3998 #line 249 "util/configlexer.lex"
4163 case 43:
4164 YY_RULE_SETUP
4165 #line 257 "util/configlexer.lex"
39994166 { YDVAR(1, VAR_TLS_CIPHERSUITES) }
40004167 YY_BREAK
4001 case 43:
4002 YY_RULE_SETUP
4003 #line 250 "util/configlexer.lex"
4168 case 44:
4169 YY_RULE_SETUP
4170 #line 258 "util/configlexer.lex"
4171 { YDVAR(1, VAR_TLS_USE_SNI) }
4172 YY_BREAK
4173 case 45:
4174 YY_RULE_SETUP
4175 #line 259 "util/configlexer.lex"
40044176 { YDVAR(1, VAR_USE_SYSTEMD) }
40054177 YY_BREAK
4006 case 44:
4007 YY_RULE_SETUP
4008 #line 251 "util/configlexer.lex"
4178 case 46:
4179 YY_RULE_SETUP
4180 #line 260 "util/configlexer.lex"
40094181 { YDVAR(1, VAR_DO_DAEMONIZE) }
40104182 YY_BREAK
4011 case 45:
4012 YY_RULE_SETUP
4013 #line 252 "util/configlexer.lex"
4183 case 47:
4184 YY_RULE_SETUP
4185 #line 261 "util/configlexer.lex"
40144186 { YDVAR(1, VAR_INTERFACE) }
40154187 YY_BREAK
4016 case 46:
4017 YY_RULE_SETUP
4018 #line 253 "util/configlexer.lex"
4188 case 48:
4189 YY_RULE_SETUP
4190 #line 262 "util/configlexer.lex"
40194191 { YDVAR(1, VAR_INTERFACE) }
40204192 YY_BREAK
4021 case 47:
4022 YY_RULE_SETUP
4023 #line 254 "util/configlexer.lex"
4193 case 49:
4194 YY_RULE_SETUP
4195 #line 263 "util/configlexer.lex"
40244196 { YDVAR(1, VAR_OUTGOING_INTERFACE) }
40254197 YY_BREAK
4026 case 48:
4027 YY_RULE_SETUP
4028 #line 255 "util/configlexer.lex"
4198 case 50:
4199 YY_RULE_SETUP
4200 #line 264 "util/configlexer.lex"
40294201 { YDVAR(1, VAR_INTERFACE_AUTOMATIC) }
40304202 YY_BREAK
4031 case 49:
4032 YY_RULE_SETUP
4033 #line 256 "util/configlexer.lex"
4203 case 51:
4204 YY_RULE_SETUP
4205 #line 265 "util/configlexer.lex"
40344206 { YDVAR(1, VAR_SO_RCVBUF) }
40354207 YY_BREAK
4036 case 50:
4037 YY_RULE_SETUP
4038 #line 257 "util/configlexer.lex"
4208 case 52:
4209 YY_RULE_SETUP
4210 #line 266 "util/configlexer.lex"
40394211 { YDVAR(1, VAR_SO_SNDBUF) }
40404212 YY_BREAK
4041 case 51:
4042 YY_RULE_SETUP
4043 #line 258 "util/configlexer.lex"
4213 case 53:
4214 YY_RULE_SETUP
4215 #line 267 "util/configlexer.lex"
40444216 { YDVAR(1, VAR_SO_REUSEPORT) }
40454217 YY_BREAK
4046 case 52:
4047 YY_RULE_SETUP
4048 #line 259 "util/configlexer.lex"
4218 case 54:
4219 YY_RULE_SETUP
4220 #line 268 "util/configlexer.lex"
40494221 { YDVAR(1, VAR_IP_TRANSPARENT) }
40504222 YY_BREAK
4051 case 53:
4052 YY_RULE_SETUP
4053 #line 260 "util/configlexer.lex"
4223 case 55:
4224 YY_RULE_SETUP
4225 #line 269 "util/configlexer.lex"
40544226 { YDVAR(1, VAR_IP_FREEBIND) }
40554227 YY_BREAK
4056 case 54:
4057 YY_RULE_SETUP
4058 #line 261 "util/configlexer.lex"
4228 case 56:
4229 YY_RULE_SETUP
4230 #line 270 "util/configlexer.lex"
4231 { YDVAR(1, VAR_IP_DSCP) }
4232 YY_BREAK
4233 case 57:
4234 YY_RULE_SETUP
4235 #line 271 "util/configlexer.lex"
40594236 { YDVAR(1, VAR_CHROOT) }
40604237 YY_BREAK
4061 case 55:
4062 YY_RULE_SETUP
4063 #line 262 "util/configlexer.lex"
4238 case 58:
4239 YY_RULE_SETUP
4240 #line 272 "util/configlexer.lex"
40644241 { YDVAR(1, VAR_USERNAME) }
40654242 YY_BREAK
4066 case 56:
4067 YY_RULE_SETUP
4068 #line 263 "util/configlexer.lex"
4243 case 59:
4244 YY_RULE_SETUP
4245 #line 273 "util/configlexer.lex"
40694246 { YDVAR(1, VAR_DIRECTORY) }
40704247 YY_BREAK
4071 case 57:
4072 YY_RULE_SETUP
4073 #line 264 "util/configlexer.lex"
4248 case 60:
4249 YY_RULE_SETUP
4250 #line 274 "util/configlexer.lex"
40744251 { YDVAR(1, VAR_LOGFILE) }
40754252 YY_BREAK
4076 case 58:
4077 YY_RULE_SETUP
4078 #line 265 "util/configlexer.lex"
4253 case 61:
4254 YY_RULE_SETUP
4255 #line 275 "util/configlexer.lex"
40794256 { YDVAR(1, VAR_PIDFILE) }
40804257 YY_BREAK
4081 case 59:
4082 YY_RULE_SETUP
4083 #line 266 "util/configlexer.lex"
4258 case 62:
4259 YY_RULE_SETUP
4260 #line 276 "util/configlexer.lex"
40844261 { YDVAR(1, VAR_ROOT_HINTS) }
40854262 YY_BREAK
4086 case 60:
4087 YY_RULE_SETUP
4088 #line 267 "util/configlexer.lex"
4263 case 63:
4264 YY_RULE_SETUP
4265 #line 277 "util/configlexer.lex"
40894266 { YDVAR(1, VAR_STREAM_WAIT_SIZE) }
40904267 YY_BREAK
4091 case 61:
4092 YY_RULE_SETUP
4093 #line 268 "util/configlexer.lex"
4268 case 64:
4269 YY_RULE_SETUP
4270 #line 278 "util/configlexer.lex"
40944271 { YDVAR(1, VAR_EDNS_BUFFER_SIZE) }
40954272 YY_BREAK
4096 case 62:
4097 YY_RULE_SETUP
4098 #line 269 "util/configlexer.lex"
4273 case 65:
4274 YY_RULE_SETUP
4275 #line 279 "util/configlexer.lex"
40994276 { YDVAR(1, VAR_MSG_BUFFER_SIZE) }
41004277 YY_BREAK
4101 case 63:
4102 YY_RULE_SETUP
4103 #line 270 "util/configlexer.lex"
4278 case 66:
4279 YY_RULE_SETUP
4280 #line 280 "util/configlexer.lex"
41044281 { YDVAR(1, VAR_MSG_CACHE_SIZE) }
41054282 YY_BREAK
4106 case 64:
4107 YY_RULE_SETUP
4108 #line 271 "util/configlexer.lex"
4283 case 67:
4284 YY_RULE_SETUP
4285 #line 281 "util/configlexer.lex"
41094286 { YDVAR(1, VAR_MSG_CACHE_SLABS) }
41104287 YY_BREAK
4111 case 65:
4112 YY_RULE_SETUP
4113 #line 272 "util/configlexer.lex"
4288 case 68:
4289 YY_RULE_SETUP
4290 #line 282 "util/configlexer.lex"
41144291 { YDVAR(1, VAR_RRSET_CACHE_SIZE) }
41154292 YY_BREAK
4116 case 66:
4117 YY_RULE_SETUP
4118 #line 273 "util/configlexer.lex"
4293 case 69:
4294 YY_RULE_SETUP
4295 #line 283 "util/configlexer.lex"
41194296 { YDVAR(1, VAR_RRSET_CACHE_SLABS) }
41204297 YY_BREAK
4121 case 67:
4122 YY_RULE_SETUP
4123 #line 274 "util/configlexer.lex"
4298 case 70:
4299 YY_RULE_SETUP
4300 #line 284 "util/configlexer.lex"
41244301 { YDVAR(1, VAR_CACHE_MAX_TTL) }
41254302 YY_BREAK
4126 case 68:
4127 YY_RULE_SETUP
4128 #line 275 "util/configlexer.lex"
4303 case 71:
4304 YY_RULE_SETUP
4305 #line 285 "util/configlexer.lex"
41294306 { YDVAR(1, VAR_CACHE_MAX_NEGATIVE_TTL) }
41304307 YY_BREAK
4131 case 69:
4132 YY_RULE_SETUP
4133 #line 276 "util/configlexer.lex"
4308 case 72:
4309 YY_RULE_SETUP
4310 #line 286 "util/configlexer.lex"
41344311 { YDVAR(1, VAR_CACHE_MIN_TTL) }
41354312 YY_BREAK
4136 case 70:
4137 YY_RULE_SETUP
4138 #line 277 "util/configlexer.lex"
4313 case 73:
4314 YY_RULE_SETUP
4315 #line 287 "util/configlexer.lex"
41394316 { YDVAR(1, VAR_INFRA_HOST_TTL) }
41404317 YY_BREAK
4141 case 71:
4142 YY_RULE_SETUP
4143 #line 278 "util/configlexer.lex"
4318 case 74:
4319 YY_RULE_SETUP
4320 #line 288 "util/configlexer.lex"
41444321 { YDVAR(1, VAR_INFRA_LAME_TTL) }
41454322 YY_BREAK
4146 case 72:
4147 YY_RULE_SETUP
4148 #line 279 "util/configlexer.lex"
4323 case 75:
4324 YY_RULE_SETUP
4325 #line 289 "util/configlexer.lex"
41494326 { YDVAR(1, VAR_INFRA_CACHE_SLABS) }
41504327 YY_BREAK
4151 case 73:
4152 YY_RULE_SETUP
4153 #line 280 "util/configlexer.lex"
4328 case 76:
4329 YY_RULE_SETUP
4330 #line 290 "util/configlexer.lex"
41544331 { YDVAR(1, VAR_INFRA_CACHE_NUMHOSTS) }
41554332 YY_BREAK
4156 case 74:
4157 YY_RULE_SETUP
4158 #line 281 "util/configlexer.lex"
4333 case 77:
4334 YY_RULE_SETUP
4335 #line 291 "util/configlexer.lex"
41594336 { YDVAR(1, VAR_INFRA_CACHE_LAME_SIZE) }
41604337 YY_BREAK
4161 case 75:
4162 YY_RULE_SETUP
4163 #line 282 "util/configlexer.lex"
4338 case 78:
4339 YY_RULE_SETUP
4340 #line 292 "util/configlexer.lex"
41644341 { YDVAR(1, VAR_INFRA_CACHE_MIN_RTT) }
41654342 YY_BREAK
4166 case 76:
4167 YY_RULE_SETUP
4168 #line 283 "util/configlexer.lex"
4343 case 79:
4344 YY_RULE_SETUP
4345 #line 293 "util/configlexer.lex"
41694346 { YDVAR(1, VAR_NUM_QUERIES_PER_THREAD) }
41704347 YY_BREAK
4171 case 77:
4172 YY_RULE_SETUP
4173 #line 284 "util/configlexer.lex"
4348 case 80:
4349 YY_RULE_SETUP
4350 #line 294 "util/configlexer.lex"
41744351 { YDVAR(1, VAR_JOSTLE_TIMEOUT) }
41754352 YY_BREAK
4176 case 78:
4177 YY_RULE_SETUP
4178 #line 285 "util/configlexer.lex"
4353 case 81:
4354 YY_RULE_SETUP
4355 #line 295 "util/configlexer.lex"
41794356 { YDVAR(1, VAR_DELAY_CLOSE) }
41804357 YY_BREAK
4181 case 79:
4182 YY_RULE_SETUP
4183 #line 286 "util/configlexer.lex"
4358 case 82:
4359 YY_RULE_SETUP
4360 #line 296 "util/configlexer.lex"
41844361 { YDVAR(1, VAR_TARGET_FETCH_POLICY) }
41854362 YY_BREAK
4186 case 80:
4187 YY_RULE_SETUP
4188 #line 287 "util/configlexer.lex"
4363 case 83:
4364 YY_RULE_SETUP
4365 #line 297 "util/configlexer.lex"
41894366 { YDVAR(1, VAR_HARDEN_SHORT_BUFSIZE) }
41904367 YY_BREAK
4191 case 81:
4192 YY_RULE_SETUP
4193 #line 288 "util/configlexer.lex"
4368 case 84:
4369 YY_RULE_SETUP
4370 #line 298 "util/configlexer.lex"
41944371 { YDVAR(1, VAR_HARDEN_LARGE_QUERIES) }
41954372 YY_BREAK
4196 case 82:
4197 YY_RULE_SETUP
4198 #line 289 "util/configlexer.lex"
4373 case 85:
4374 YY_RULE_SETUP
4375 #line 299 "util/configlexer.lex"
41994376 { YDVAR(1, VAR_HARDEN_GLUE) }
42004377 YY_BREAK
4201 case 83:
4202 YY_RULE_SETUP
4203 #line 290 "util/configlexer.lex"
4378 case 86:
4379 YY_RULE_SETUP
4380 #line 300 "util/configlexer.lex"
42044381 { YDVAR(1, VAR_HARDEN_DNSSEC_STRIPPED) }
42054382 YY_BREAK
4206 case 84:
4207 YY_RULE_SETUP
4208 #line 291 "util/configlexer.lex"
4383 case 87:
4384 YY_RULE_SETUP
4385 #line 301 "util/configlexer.lex"
42094386 { YDVAR(1, VAR_HARDEN_BELOW_NXDOMAIN) }
42104387 YY_BREAK
4211 case 85:
4212 YY_RULE_SETUP
4213 #line 292 "util/configlexer.lex"
4388 case 88:
4389 YY_RULE_SETUP
4390 #line 302 "util/configlexer.lex"
42144391 { YDVAR(1, VAR_HARDEN_REFERRAL_PATH) }
42154392 YY_BREAK
4216 case 86:
4217 YY_RULE_SETUP
4218 #line 293 "util/configlexer.lex"
4393 case 89:
4394 YY_RULE_SETUP
4395 #line 303 "util/configlexer.lex"
42194396 { YDVAR(1, VAR_HARDEN_ALGO_DOWNGRADE) }
42204397 YY_BREAK
4221 case 87:
4222 YY_RULE_SETUP
4223 #line 294 "util/configlexer.lex"
4398 case 90:
4399 YY_RULE_SETUP
4400 #line 304 "util/configlexer.lex"
42244401 { YDVAR(1, VAR_USE_CAPS_FOR_ID) }
42254402 YY_BREAK
4226 case 88:
4227 YY_RULE_SETUP
4228 #line 295 "util/configlexer.lex"
4403 case 91:
4404 YY_RULE_SETUP
4405 #line 305 "util/configlexer.lex"
42294406 { YDVAR(1, VAR_CAPS_WHITELIST) }
42304407 YY_BREAK
4231 case 89:
4232 YY_RULE_SETUP
4233 #line 296 "util/configlexer.lex"
4408 case 92:
4409 YY_RULE_SETUP
4410 #line 306 "util/configlexer.lex"
42344411 { YDVAR(1, VAR_UNWANTED_REPLY_THRESHOLD) }
42354412 YY_BREAK
4236 case 90:
4237 YY_RULE_SETUP
4238 #line 297 "util/configlexer.lex"
4413 case 93:
4414 YY_RULE_SETUP
4415 #line 307 "util/configlexer.lex"
42394416 { YDVAR(1, VAR_PRIVATE_ADDRESS) }
42404417 YY_BREAK
4241 case 91:
4242 YY_RULE_SETUP
4243 #line 298 "util/configlexer.lex"
4418 case 94:
4419 YY_RULE_SETUP
4420 #line 308 "util/configlexer.lex"
42444421 { YDVAR(1, VAR_PRIVATE_DOMAIN) }
42454422 YY_BREAK
4246 case 92:
4247 YY_RULE_SETUP
4248 #line 299 "util/configlexer.lex"
4423 case 95:
4424 YY_RULE_SETUP
4425 #line 309 "util/configlexer.lex"
42494426 { YDVAR(1, VAR_PREFETCH_KEY) }
42504427 YY_BREAK
4251 case 93:
4252 YY_RULE_SETUP
4253 #line 300 "util/configlexer.lex"
4428 case 96:
4429 YY_RULE_SETUP
4430 #line 310 "util/configlexer.lex"
42544431 { YDVAR(1, VAR_PREFETCH) }
42554432 YY_BREAK
4256 case 94:
4257 YY_RULE_SETUP
4258 #line 301 "util/configlexer.lex"
4433 case 97:
4434 YY_RULE_SETUP
4435 #line 311 "util/configlexer.lex"
42594436 { YDVAR(1, VAR_DENY_ANY) }
42604437 YY_BREAK
4261 case 95:
4262 YY_RULE_SETUP
4263 #line 302 "util/configlexer.lex"
4438 case 98:
4439 YY_RULE_SETUP
4440 #line 312 "util/configlexer.lex"
42644441 { YDVAR(0, VAR_STUB_ZONE) }
42654442 YY_BREAK
4266 case 96:
4267 YY_RULE_SETUP
4268 #line 303 "util/configlexer.lex"
4443 case 99:
4444 YY_RULE_SETUP
4445 #line 313 "util/configlexer.lex"
42694446 { YDVAR(1, VAR_NAME) }
42704447 YY_BREAK
4271 case 97:
4272 YY_RULE_SETUP
4273 #line 304 "util/configlexer.lex"
4448 case 100:
4449 YY_RULE_SETUP
4450 #line 314 "util/configlexer.lex"
42744451 { YDVAR(1, VAR_STUB_ADDR) }
42754452 YY_BREAK
4276 case 98:
4277 YY_RULE_SETUP
4278 #line 305 "util/configlexer.lex"
4453 case 101:
4454 YY_RULE_SETUP
4455 #line 315 "util/configlexer.lex"
42794456 { YDVAR(1, VAR_STUB_HOST) }
42804457 YY_BREAK
4281 case 99:
4282 YY_RULE_SETUP
4283 #line 306 "util/configlexer.lex"
4458 case 102:
4459 YY_RULE_SETUP
4460 #line 316 "util/configlexer.lex"
42844461 { YDVAR(1, VAR_STUB_PRIME) }
42854462 YY_BREAK
4286 case 100:
4287 YY_RULE_SETUP
4288 #line 307 "util/configlexer.lex"
4463 case 103:
4464 YY_RULE_SETUP
4465 #line 317 "util/configlexer.lex"
42894466 { YDVAR(1, VAR_STUB_FIRST) }
42904467 YY_BREAK
4291 case 101:
4292 YY_RULE_SETUP
4293 #line 308 "util/configlexer.lex"
4468 case 104:
4469 YY_RULE_SETUP
4470 #line 318 "util/configlexer.lex"
42944471 { YDVAR(1, VAR_STUB_NO_CACHE) }
42954472 YY_BREAK
4296 case 102:
4297 YY_RULE_SETUP
4298 #line 309 "util/configlexer.lex"
4473 case 105:
4474 YY_RULE_SETUP
4475 #line 319 "util/configlexer.lex"
42994476 { YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
43004477 YY_BREAK
4301 case 103:
4302 YY_RULE_SETUP
4303 #line 310 "util/configlexer.lex"
4478 case 106:
4479 YY_RULE_SETUP
4480 #line 320 "util/configlexer.lex"
43044481 { YDVAR(1, VAR_STUB_SSL_UPSTREAM) }
43054482 YY_BREAK
4306 case 104:
4307 YY_RULE_SETUP
4308 #line 311 "util/configlexer.lex"
4483 case 107:
4484 YY_RULE_SETUP
4485 #line 321 "util/configlexer.lex"
43094486 { YDVAR(0, VAR_FORWARD_ZONE) }
43104487 YY_BREAK
4311 case 105:
4312 YY_RULE_SETUP
4313 #line 312 "util/configlexer.lex"
4488 case 108:
4489 YY_RULE_SETUP
4490 #line 322 "util/configlexer.lex"
43144491 { YDVAR(1, VAR_FORWARD_ADDR) }
43154492 YY_BREAK
4316 case 106:
4317 YY_RULE_SETUP
4318 #line 313 "util/configlexer.lex"
4493 case 109:
4494 YY_RULE_SETUP
4495 #line 323 "util/configlexer.lex"
43194496 { YDVAR(1, VAR_FORWARD_HOST) }
43204497 YY_BREAK
4321 case 107:
4322 YY_RULE_SETUP
4323 #line 314 "util/configlexer.lex"
4498 case 110:
4499 YY_RULE_SETUP
4500 #line 324 "util/configlexer.lex"
43244501 { YDVAR(1, VAR_FORWARD_FIRST) }
43254502 YY_BREAK
4326 case 108:
4327 YY_RULE_SETUP
4328 #line 315 "util/configlexer.lex"
4503 case 111:
4504 YY_RULE_SETUP
4505 #line 325 "util/configlexer.lex"
43294506 { YDVAR(1, VAR_FORWARD_NO_CACHE) }
43304507 YY_BREAK
4331 case 109:
4332 YY_RULE_SETUP
4333 #line 316 "util/configlexer.lex"
4508 case 112:
4509 YY_RULE_SETUP
4510 #line 326 "util/configlexer.lex"
43344511 { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
43354512 YY_BREAK
4336 case 110:
4337 YY_RULE_SETUP
4338 #line 317 "util/configlexer.lex"
4513 case 113:
4514 YY_RULE_SETUP
4515 #line 327 "util/configlexer.lex"
43394516 { YDVAR(1, VAR_FORWARD_SSL_UPSTREAM) }
43404517 YY_BREAK
4341 case 111:
4342 YY_RULE_SETUP
4343 #line 318 "util/configlexer.lex"
4518 case 114:
4519 YY_RULE_SETUP
4520 #line 328 "util/configlexer.lex"
43444521 { YDVAR(0, VAR_AUTH_ZONE) }
43454522 YY_BREAK
4346 case 112:
4347 YY_RULE_SETUP
4348 #line 319 "util/configlexer.lex"
4523 case 115:
4524 YY_RULE_SETUP
4525 #line 329 "util/configlexer.lex"
43494526 { YDVAR(0, VAR_RPZ) }
43504527 YY_BREAK
4351 case 113:
4352 YY_RULE_SETUP
4353 #line 320 "util/configlexer.lex"
4528 case 116:
4529 YY_RULE_SETUP
4530 #line 330 "util/configlexer.lex"
43544531 { YDVAR(1, VAR_TAGS) }
43554532 YY_BREAK
4356 case 114:
4357 YY_RULE_SETUP
4358 #line 321 "util/configlexer.lex"
4533 case 117:
4534 YY_RULE_SETUP
4535 #line 331 "util/configlexer.lex"
43594536 { YDVAR(1, VAR_RPZ_ACTION_OVERRIDE) }
43604537 YY_BREAK
4361 case 115:
4362 YY_RULE_SETUP
4363 #line 322 "util/configlexer.lex"
4538 case 118:
4539 YY_RULE_SETUP
4540 #line 332 "util/configlexer.lex"
43644541 { YDVAR(1, VAR_RPZ_CNAME_OVERRIDE) }
43654542 YY_BREAK
4366 case 116:
4367 YY_RULE_SETUP
4368 #line 323 "util/configlexer.lex"
4543 case 119:
4544 YY_RULE_SETUP
4545 #line 333 "util/configlexer.lex"
43694546 { YDVAR(1, VAR_RPZ_LOG) }
43704547 YY_BREAK
4371 case 117:
4372 YY_RULE_SETUP
4373 #line 324 "util/configlexer.lex"
4548 case 120:
4549 YY_RULE_SETUP
4550 #line 334 "util/configlexer.lex"
43744551 { YDVAR(1, VAR_RPZ_LOG_NAME) }
43754552 YY_BREAK
4376 case 118:
4377 YY_RULE_SETUP
4378 #line 325 "util/configlexer.lex"
4553 case 121:
4554 YY_RULE_SETUP
4555 #line 335 "util/configlexer.lex"
43794556 { YDVAR(1, VAR_ZONEFILE) }
43804557 YY_BREAK
4381 case 119:
4382 YY_RULE_SETUP
4383 #line 326 "util/configlexer.lex"
4558 case 122:
4559 YY_RULE_SETUP
4560 #line 336 "util/configlexer.lex"
43844561 { YDVAR(1, VAR_MASTER) }
43854562 YY_BREAK
4386 case 120:
4387 YY_RULE_SETUP
4388 #line 327 "util/configlexer.lex"
4563 case 123:
4564 YY_RULE_SETUP
4565 #line 337 "util/configlexer.lex"
43894566 { YDVAR(1, VAR_URL) }
43904567 YY_BREAK
4391 case 121:
4392 YY_RULE_SETUP
4393 #line 328 "util/configlexer.lex"
4568 case 124:
4569 YY_RULE_SETUP
4570 #line 338 "util/configlexer.lex"
43944571 { YDVAR(1, VAR_ALLOW_NOTIFY) }
43954572 YY_BREAK
4396 case 122:
4397 YY_RULE_SETUP
4398 #line 329 "util/configlexer.lex"
4573 case 125:
4574 YY_RULE_SETUP
4575 #line 339 "util/configlexer.lex"
43994576 { YDVAR(1, VAR_FOR_DOWNSTREAM) }
44004577 YY_BREAK
4401 case 123:
4402 YY_RULE_SETUP
4403 #line 330 "util/configlexer.lex"
4578 case 126:
4579 YY_RULE_SETUP
4580 #line 340 "util/configlexer.lex"
44044581 { YDVAR(1, VAR_FOR_UPSTREAM) }
44054582 YY_BREAK
4406 case 124:
4407 YY_RULE_SETUP
4408 #line 331 "util/configlexer.lex"
4583 case 127:
4584 YY_RULE_SETUP
4585 #line 341 "util/configlexer.lex"
44094586 { YDVAR(1, VAR_FALLBACK_ENABLED) }
44104587 YY_BREAK
4411 case 125:
4412 YY_RULE_SETUP
4413 #line 332 "util/configlexer.lex"
4588 case 128:
4589 YY_RULE_SETUP
4590 #line 342 "util/configlexer.lex"
44144591 { YDVAR(0, VAR_VIEW) }
44154592 YY_BREAK
4416 case 126:
4417 YY_RULE_SETUP
4418 #line 333 "util/configlexer.lex"
4593 case 129:
4594 YY_RULE_SETUP
4595 #line 343 "util/configlexer.lex"
44194596 { YDVAR(1, VAR_VIEW_FIRST) }
44204597 YY_BREAK
4421 case 127:
4422 YY_RULE_SETUP
4423 #line 334 "util/configlexer.lex"
4598 case 130:
4599 YY_RULE_SETUP
4600 #line 344 "util/configlexer.lex"
44244601 { YDVAR(1, VAR_DO_NOT_QUERY_ADDRESS) }
44254602 YY_BREAK
4426 case 128:
4427 YY_RULE_SETUP
4428 #line 335 "util/configlexer.lex"
4603 case 131:
4604 YY_RULE_SETUP
4605 #line 345 "util/configlexer.lex"
44294606 { YDVAR(1, VAR_DO_NOT_QUERY_LOCALHOST) }
44304607 YY_BREAK
4431 case 129:
4432 YY_RULE_SETUP
4433 #line 336 "util/configlexer.lex"
4608 case 132:
4609 YY_RULE_SETUP
4610 #line 346 "util/configlexer.lex"
44344611 { YDVAR(2, VAR_ACCESS_CONTROL) }
44354612 YY_BREAK
4436 case 130:
4437 YY_RULE_SETUP
4438 #line 337 "util/configlexer.lex"
4613 case 133:
4614 YY_RULE_SETUP
4615 #line 347 "util/configlexer.lex"
44394616 { YDVAR(1, VAR_SEND_CLIENT_SUBNET) }
44404617 YY_BREAK
4441 case 131:
4442 YY_RULE_SETUP
4443 #line 338 "util/configlexer.lex"
4618 case 134:
4619 YY_RULE_SETUP
4620 #line 348 "util/configlexer.lex"
44444621 { YDVAR(1, VAR_CLIENT_SUBNET_ZONE) }
44454622 YY_BREAK
4446 case 132:
4447 YY_RULE_SETUP
4448 #line 339 "util/configlexer.lex"
4623 case 135:
4624 YY_RULE_SETUP
4625 #line 349 "util/configlexer.lex"
44494626 { YDVAR(1, VAR_CLIENT_SUBNET_ALWAYS_FORWARD) }
44504627 YY_BREAK
4451 case 133:
4452 YY_RULE_SETUP
4453 #line 340 "util/configlexer.lex"
4628 case 136:
4629 YY_RULE_SETUP
4630 #line 350 "util/configlexer.lex"
44544631 { YDVAR(1, VAR_CLIENT_SUBNET_OPCODE) }
44554632 YY_BREAK
4456 case 134:
4457 YY_RULE_SETUP
4458 #line 341 "util/configlexer.lex"
4633 case 137:
4634 YY_RULE_SETUP
4635 #line 351 "util/configlexer.lex"
44594636 { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV4) }
44604637 YY_BREAK
4461 case 135:
4462 YY_RULE_SETUP
4463 #line 342 "util/configlexer.lex"
4638 case 138:
4639 YY_RULE_SETUP
4640 #line 352 "util/configlexer.lex"
44644641 { YDVAR(1, VAR_MAX_CLIENT_SUBNET_IPV6) }
44654642 YY_BREAK
4466 case 136:
4467 YY_RULE_SETUP
4468 #line 343 "util/configlexer.lex"
4643 case 139:
4644 YY_RULE_SETUP
4645 #line 353 "util/configlexer.lex"
44694646 { YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV4) }
44704647 YY_BREAK
4471 case 137:
4472 YY_RULE_SETUP
4473 #line 344 "util/configlexer.lex"
4648 case 140:
4649 YY_RULE_SETUP
4650 #line 354 "util/configlexer.lex"
44744651 { YDVAR(1, VAR_MIN_CLIENT_SUBNET_IPV6) }
44754652 YY_BREAK
4476 case 138:
4477 YY_RULE_SETUP
4478 #line 345 "util/configlexer.lex"
4653 case 141:
4654 YY_RULE_SETUP
4655 #line 355 "util/configlexer.lex"
44794656 { YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV4) }
44804657 YY_BREAK
4481 case 139:
4482 YY_RULE_SETUP
4483 #line 346 "util/configlexer.lex"
4658 case 142:
4659 YY_RULE_SETUP
4660 #line 356 "util/configlexer.lex"
44844661 { YDVAR(1, VAR_MAX_ECS_TREE_SIZE_IPV6) }
44854662 YY_BREAK
4486 case 140:
4487 YY_RULE_SETUP
4488 #line 347 "util/configlexer.lex"
4663 case 143:
4664 YY_RULE_SETUP
4665 #line 357 "util/configlexer.lex"
44894666 { YDVAR(1, VAR_HIDE_IDENTITY) }
44904667 YY_BREAK
4491 case 141:
4492 YY_RULE_SETUP
4493 #line 348 "util/configlexer.lex"
4668 case 144:
4669 YY_RULE_SETUP
4670 #line 358 "util/configlexer.lex"
44944671 { YDVAR(1, VAR_HIDE_VERSION) }
44954672 YY_BREAK
4496 case 142:
4497 YY_RULE_SETUP
4498 #line 349 "util/configlexer.lex"
4673 case 145:
4674 YY_RULE_SETUP
4675 #line 359 "util/configlexer.lex"
44994676 { YDVAR(1, VAR_HIDE_TRUSTANCHOR) }
45004677 YY_BREAK
4501 case 143:
4502 YY_RULE_SETUP
4503 #line 350 "util/configlexer.lex"
4678 case 146:
4679 YY_RULE_SETUP
4680 #line 360 "util/configlexer.lex"
45044681 { YDVAR(1, VAR_IDENTITY) }
45054682 YY_BREAK
4506 case 144:
4507 YY_RULE_SETUP
4508 #line 351 "util/configlexer.lex"
4683 case 147:
4684 YY_RULE_SETUP
4685 #line 361 "util/configlexer.lex"
45094686 { YDVAR(1, VAR_VERSION) }
45104687 YY_BREAK
4511 case 145:
4512 YY_RULE_SETUP
4513 #line 352 "util/configlexer.lex"
4688 case 148:
4689 YY_RULE_SETUP
4690 #line 362 "util/configlexer.lex"
45144691 { YDVAR(1, VAR_MODULE_CONF) }
45154692 YY_BREAK
4516 case 146:
4517 YY_RULE_SETUP
4518 #line 353 "util/configlexer.lex"
4693 case 149:
4694 YY_RULE_SETUP
4695 #line 363 "util/configlexer.lex"
45194696 { YDVAR(1, VAR_DLV_ANCHOR) }
45204697 YY_BREAK
4521 case 147:
4522 YY_RULE_SETUP
4523 #line 354 "util/configlexer.lex"
4698 case 150:
4699 YY_RULE_SETUP
4700 #line 364 "util/configlexer.lex"
45244701 { YDVAR(1, VAR_DLV_ANCHOR_FILE) }
45254702 YY_BREAK
4526 case 148:
4527 YY_RULE_SETUP
4528 #line 355 "util/configlexer.lex"
4703 case 151:
4704 YY_RULE_SETUP
4705 #line 365 "util/configlexer.lex"
45294706 { YDVAR(1, VAR_TRUST_ANCHOR_FILE) }
45304707 YY_BREAK
4531 case 149:
4532 YY_RULE_SETUP
4533 #line 356 "util/configlexer.lex"
4708 case 152:
4709 YY_RULE_SETUP
4710 #line 366 "util/configlexer.lex"
45344711 { YDVAR(1, VAR_AUTO_TRUST_ANCHOR_FILE) }
45354712 YY_BREAK
4536 case 150:
4537 YY_RULE_SETUP
4538 #line 357 "util/configlexer.lex"
4713 case 153:
4714 YY_RULE_SETUP
4715 #line 367 "util/configlexer.lex"
45394716 { YDVAR(1, VAR_TRUSTED_KEYS_FILE) }
45404717 YY_BREAK
4541 case 151:
4542 YY_RULE_SETUP
4543 #line 358 "util/configlexer.lex"
4718 case 154:
4719 YY_RULE_SETUP
4720 #line 368 "util/configlexer.lex"
45444721 { YDVAR(1, VAR_TRUST_ANCHOR) }
45454722 YY_BREAK
4546 case 152:
4547 YY_RULE_SETUP
4548 #line 359 "util/configlexer.lex"
4723 case 155:
4724 YY_RULE_SETUP
4725 #line 369 "util/configlexer.lex"
45494726 { YDVAR(1, VAR_TRUST_ANCHOR_SIGNALING) }
45504727 YY_BREAK
4551 case 153:
4552 YY_RULE_SETUP
4553 #line 360 "util/configlexer.lex"
4728 case 156:
4729 YY_RULE_SETUP
4730 #line 370 "util/configlexer.lex"
45544731 { YDVAR(1, VAR_ROOT_KEY_SENTINEL) }
45554732 YY_BREAK
4556 case 154:
4557 YY_RULE_SETUP
4558 #line 361 "util/configlexer.lex"
4733 case 157:
4734 YY_RULE_SETUP
4735 #line 371 "util/configlexer.lex"
45594736 { YDVAR(1, VAR_VAL_OVERRIDE_DATE) }
45604737 YY_BREAK
4561 case 155:
4562 YY_RULE_SETUP
4563 #line 362 "util/configlexer.lex"
4738 case 158:
4739 YY_RULE_SETUP
4740 #line 372 "util/configlexer.lex"
45644741 { YDVAR(1, VAR_VAL_SIG_SKEW_MIN) }
45654742 YY_BREAK
4566 case 156:
4567 YY_RULE_SETUP
4568 #line 363 "util/configlexer.lex"
4743 case 159:
4744 YY_RULE_SETUP
4745 #line 373 "util/configlexer.lex"
45694746 { YDVAR(1, VAR_VAL_SIG_SKEW_MAX) }
45704747 YY_BREAK
4571 case 157:
4572 YY_RULE_SETUP
4573 #line 364 "util/configlexer.lex"
4748 case 160:
4749 YY_RULE_SETUP
4750 #line 374 "util/configlexer.lex"
45744751 { YDVAR(1, VAR_BOGUS_TTL) }
45754752 YY_BREAK
4576 case 158:
4577 YY_RULE_SETUP
4578 #line 365 "util/configlexer.lex"
4753 case 161:
4754 YY_RULE_SETUP
4755 #line 375 "util/configlexer.lex"
45794756 { YDVAR(1, VAR_VAL_CLEAN_ADDITIONAL) }
45804757 YY_BREAK
4581 case 159:
4582 YY_RULE_SETUP
4583 #line 366 "util/configlexer.lex"
4758 case 162:
4759 YY_RULE_SETUP
4760 #line 376 "util/configlexer.lex"
45844761 { YDVAR(1, VAR_VAL_PERMISSIVE_MODE) }
45854762 YY_BREAK
4586 case 160:
4587 YY_RULE_SETUP
4588 #line 367 "util/configlexer.lex"
4763 case 163:
4764 YY_RULE_SETUP
4765 #line 377 "util/configlexer.lex"
45894766 { YDVAR(1, VAR_AGGRESSIVE_NSEC) }
45904767 YY_BREAK
4591 case 161:
4592 YY_RULE_SETUP
4593 #line 368 "util/configlexer.lex"
4768 case 164:
4769 YY_RULE_SETUP
4770 #line 378 "util/configlexer.lex"
45944771 { YDVAR(1, VAR_IGNORE_CD_FLAG) }
45954772 YY_BREAK
4596 case 162:
4597 YY_RULE_SETUP
4598 #line 369 "util/configlexer.lex"
4773 case 165:
4774 YY_RULE_SETUP
4775 #line 379 "util/configlexer.lex"
45994776 { YDVAR(1, VAR_SERVE_EXPIRED) }
46004777 YY_BREAK
4601 case 163:
4602 YY_RULE_SETUP
4603 #line 370 "util/configlexer.lex"
4778 case 166:
4779 YY_RULE_SETUP
4780 #line 380 "util/configlexer.lex"
46044781 { YDVAR(1, VAR_SERVE_EXPIRED_TTL) }
46054782 YY_BREAK
4606 case 164:
4607 YY_RULE_SETUP
4608 #line 371 "util/configlexer.lex"
4783 case 167:
4784 YY_RULE_SETUP
4785 #line 381 "util/configlexer.lex"
46094786 { YDVAR(1, VAR_SERVE_EXPIRED_TTL_RESET) }
46104787 YY_BREAK
4611 case 165:
4612 YY_RULE_SETUP
4613 #line 372 "util/configlexer.lex"
4788 case 168:
4789 YY_RULE_SETUP
4790 #line 382 "util/configlexer.lex"
46144791 { YDVAR(1, VAR_SERVE_EXPIRED_REPLY_TTL) }
46154792 YY_BREAK
4616 case 166:
4617 YY_RULE_SETUP
4618 #line 373 "util/configlexer.lex"
4793 case 169:
4794 YY_RULE_SETUP
4795 #line 383 "util/configlexer.lex"
46194796 { YDVAR(1, VAR_SERVE_EXPIRED_CLIENT_TIMEOUT) }
46204797 YY_BREAK
4621 case 167:
4622 YY_RULE_SETUP
4623 #line 374 "util/configlexer.lex"
4798 case 170:
4799 YY_RULE_SETUP
4800 #line 384 "util/configlexer.lex"
46244801 { YDVAR(1, VAR_FAKE_DSA) }
46254802 YY_BREAK
4626 case 168:
4627 YY_RULE_SETUP
4628 #line 375 "util/configlexer.lex"
4803 case 171:
4804 YY_RULE_SETUP
4805 #line 385 "util/configlexer.lex"
46294806 { YDVAR(1, VAR_FAKE_SHA1) }
46304807 YY_BREAK
4631 case 169:
4632 YY_RULE_SETUP
4633 #line 376 "util/configlexer.lex"
4808 case 172:
4809 YY_RULE_SETUP
4810 #line 386 "util/configlexer.lex"
46344811 { YDVAR(1, VAR_VAL_LOG_LEVEL) }
46354812 YY_BREAK
4636 case 170:
4637 YY_RULE_SETUP
4638 #line 377 "util/configlexer.lex"
4813 case 173:
4814 YY_RULE_SETUP
4815 #line 387 "util/configlexer.lex"
46394816 { YDVAR(1, VAR_KEY_CACHE_SIZE) }
46404817 YY_BREAK
4641 case 171:
4642 YY_RULE_SETUP
4643 #line 378 "util/configlexer.lex"
4818 case 174:
4819 YY_RULE_SETUP
4820 #line 388 "util/configlexer.lex"
46444821 { YDVAR(1, VAR_KEY_CACHE_SLABS) }
46454822 YY_BREAK
4646 case 172:
4647 YY_RULE_SETUP
4648 #line 379 "util/configlexer.lex"
4823 case 175:
4824 YY_RULE_SETUP
4825 #line 389 "util/configlexer.lex"
46494826 { YDVAR(1, VAR_NEG_CACHE_SIZE) }
46504827 YY_BREAK
4651 case 173:
4652 YY_RULE_SETUP
4653 #line 380 "util/configlexer.lex"
4828 case 176:
4829 YY_RULE_SETUP
4830 #line 390 "util/configlexer.lex"
46544831 {
46554832 YDVAR(1, VAR_VAL_NSEC3_KEYSIZE_ITERATIONS) }
46564833 YY_BREAK
4657 case 174:
4658 YY_RULE_SETUP
4659 #line 382 "util/configlexer.lex"
4834 case 177:
4835 YY_RULE_SETUP
4836 #line 392 "util/configlexer.lex"
46604837 { YDVAR(1, VAR_ADD_HOLDDOWN) }
46614838 YY_BREAK
4662 case 175:
4663 YY_RULE_SETUP
4664 #line 383 "util/configlexer.lex"
4839 case 178:
4840 YY_RULE_SETUP
4841 #line 393 "util/configlexer.lex"
46654842 { YDVAR(1, VAR_DEL_HOLDDOWN) }
46664843 YY_BREAK
4667 case 176:
4668 YY_RULE_SETUP
4669 #line 384 "util/configlexer.lex"
4844 case 179:
4845 YY_RULE_SETUP
4846 #line 394 "util/configlexer.lex"
46704847 { YDVAR(1, VAR_KEEP_MISSING) }
46714848 YY_BREAK
4672 case 177:
4673 YY_RULE_SETUP
4674 #line 385 "util/configlexer.lex"
4849 case 180:
4850 YY_RULE_SETUP
4851 #line 395 "util/configlexer.lex"
46754852 { YDVAR(1, VAR_PERMIT_SMALL_HOLDDOWN) }
46764853 YY_BREAK
4677 case 178:
4678 YY_RULE_SETUP
4679 #line 386 "util/configlexer.lex"
4854 case 181:
4855 YY_RULE_SETUP
4856 #line 396 "util/configlexer.lex"
46804857 { YDVAR(1, VAR_USE_SYSLOG) }
46814858 YY_BREAK
4682 case 179:
4683 YY_RULE_SETUP
4684 #line 387 "util/configlexer.lex"
4859 case 182:
4860 YY_RULE_SETUP
4861 #line 397 "util/configlexer.lex"
46854862 { YDVAR(1, VAR_LOG_IDENTITY) }
46864863 YY_BREAK
4687 case 180:
4688 YY_RULE_SETUP
4689 #line 388 "util/configlexer.lex"
4864 case 183:
4865 YY_RULE_SETUP
4866 #line 398 "util/configlexer.lex"
46904867 { YDVAR(1, VAR_LOG_TIME_ASCII) }
46914868 YY_BREAK
4692 case 181:
4693 YY_RULE_SETUP
4694 #line 389 "util/configlexer.lex"
4869 case 184:
4870 YY_RULE_SETUP
4871 #line 399 "util/configlexer.lex"
46954872 { YDVAR(1, VAR_LOG_QUERIES) }
46964873 YY_BREAK
4697 case 182:
4698 YY_RULE_SETUP
4699 #line 390 "util/configlexer.lex"
4874 case 185:
4875 YY_RULE_SETUP
4876 #line 400 "util/configlexer.lex"
47004877 { YDVAR(1, VAR_LOG_REPLIES) }
47014878 YY_BREAK
4702 case 183:
4703 YY_RULE_SETUP
4704 #line 391 "util/configlexer.lex"
4879 case 186:
4880 YY_RULE_SETUP
4881 #line 401 "util/configlexer.lex"
47054882 { YDVAR(1, VAR_LOG_TAG_QUERYREPLY) }
47064883 YY_BREAK
4707 case 184:
4708 YY_RULE_SETUP
4709 #line 392 "util/configlexer.lex"
4884 case 187:
4885 YY_RULE_SETUP
4886 #line 402 "util/configlexer.lex"
47104887 { YDVAR(1, VAR_LOG_LOCAL_ACTIONS) }
47114888 YY_BREAK
4712 case 185:
4713 YY_RULE_SETUP
4714 #line 393 "util/configlexer.lex"
4889 case 188:
4890 YY_RULE_SETUP
4891 #line 403 "util/configlexer.lex"
47154892 { YDVAR(1, VAR_LOG_SERVFAIL) }
47164893 YY_BREAK
4717 case 186:
4718 YY_RULE_SETUP
4719 #line 394 "util/configlexer.lex"
4894 case 189:
4895 YY_RULE_SETUP
4896 #line 404 "util/configlexer.lex"
47204897 { YDVAR(2, VAR_LOCAL_ZONE) }
47214898 YY_BREAK
4722 case 187:
4723 YY_RULE_SETUP
4724 #line 395 "util/configlexer.lex"
4899 case 190:
4900 YY_RULE_SETUP
4901 #line 405 "util/configlexer.lex"
47254902 { YDVAR(1, VAR_LOCAL_DATA) }
47264903 YY_BREAK
4727 case 188:
4728 YY_RULE_SETUP
4729 #line 396 "util/configlexer.lex"
4904 case 191:
4905 YY_RULE_SETUP
4906 #line 406 "util/configlexer.lex"
47304907 { YDVAR(1, VAR_LOCAL_DATA_PTR) }
47314908 YY_BREAK
4732 case 189:
4733 YY_RULE_SETUP
4734 #line 397 "util/configlexer.lex"
4909 case 192:
4910 YY_RULE_SETUP
4911 #line 407 "util/configlexer.lex"
47354912 { YDVAR(1, VAR_UNBLOCK_LAN_ZONES) }
47364913 YY_BREAK
4737 case 190:
4738 YY_RULE_SETUP
4739 #line 398 "util/configlexer.lex"
4914 case 193:
4915 YY_RULE_SETUP
4916 #line 408 "util/configlexer.lex"
47404917 { YDVAR(1, VAR_INSECURE_LAN_ZONES) }
47414918 YY_BREAK
4742 case 191:
4743 YY_RULE_SETUP
4744 #line 399 "util/configlexer.lex"
4919 case 194:
4920 YY_RULE_SETUP
4921 #line 409 "util/configlexer.lex"
47454922 { YDVAR(1, VAR_STATISTICS_INTERVAL) }
47464923 YY_BREAK
4747 case 192:
4748 YY_RULE_SETUP
4749 #line 400 "util/configlexer.lex"
4924 case 195:
4925 YY_RULE_SETUP
4926 #line 410 "util/configlexer.lex"
47504927 { YDVAR(1, VAR_STATISTICS_CUMULATIVE) }
47514928 YY_BREAK
4752 case 193:
4753 YY_RULE_SETUP
4754 #line 401 "util/configlexer.lex"
4929 case 196:
4930 YY_RULE_SETUP
4931 #line 411 "util/configlexer.lex"
47554932 { YDVAR(1, VAR_EXTENDED_STATISTICS) }
47564933 YY_BREAK
4757 case 194:
4758 YY_RULE_SETUP
4759 #line 402 "util/configlexer.lex"
4934 case 197:
4935 YY_RULE_SETUP
4936 #line 412 "util/configlexer.lex"
47604937 { YDVAR(1, VAR_SHM_ENABLE) }
47614938 YY_BREAK
4762 case 195:
4763 YY_RULE_SETUP
4764 #line 403 "util/configlexer.lex"
4939 case 198:
4940 YY_RULE_SETUP
4941 #line 413 "util/configlexer.lex"
47654942 { YDVAR(1, VAR_SHM_KEY) }
47664943 YY_BREAK
4767 case 196:
4768 YY_RULE_SETUP
4769 #line 404 "util/configlexer.lex"
4944 case 199:
4945 YY_RULE_SETUP
4946 #line 414 "util/configlexer.lex"
47704947 { YDVAR(0, VAR_REMOTE_CONTROL) }
47714948 YY_BREAK
4772 case 197:
4773 YY_RULE_SETUP
4774 #line 405 "util/configlexer.lex"
4949 case 200:
4950 YY_RULE_SETUP
4951 #line 415 "util/configlexer.lex"
47754952 { YDVAR(1, VAR_CONTROL_ENABLE) }
47764953 YY_BREAK
4777 case 198:
4778 YY_RULE_SETUP
4779 #line 406 "util/configlexer.lex"
4954 case 201:
4955 YY_RULE_SETUP
4956 #line 416 "util/configlexer.lex"
47804957 { YDVAR(1, VAR_CONTROL_INTERFACE) }
47814958 YY_BREAK
4782 case 199:
4783 YY_RULE_SETUP
4784 #line 407 "util/configlexer.lex"
4959 case 202:
4960 YY_RULE_SETUP
4961 #line 417 "util/configlexer.lex"
47854962 { YDVAR(1, VAR_CONTROL_PORT) }
47864963 YY_BREAK
4787 case 200:
4788 YY_RULE_SETUP
4789 #line 408 "util/configlexer.lex"
4964 case 203:
4965 YY_RULE_SETUP
4966 #line 418 "util/configlexer.lex"
47904967 { YDVAR(1, VAR_CONTROL_USE_CERT) }
47914968 YY_BREAK
4792 case 201:
4793 YY_RULE_SETUP
4794 #line 409 "util/configlexer.lex"
4969 case 204:
4970 YY_RULE_SETUP
4971 #line 419 "util/configlexer.lex"
47954972 { YDVAR(1, VAR_SERVER_KEY_FILE) }
47964973 YY_BREAK
4797 case 202:
4798 YY_RULE_SETUP
4799 #line 410 "util/configlexer.lex"
4974 case 205:
4975 YY_RULE_SETUP
4976 #line 420 "util/configlexer.lex"
48004977 { YDVAR(1, VAR_SERVER_CERT_FILE) }
48014978 YY_BREAK
4802 case 203:
4803 YY_RULE_SETUP
4804 #line 411 "util/configlexer.lex"
4979 case 206:
4980 YY_RULE_SETUP
4981 #line 421 "util/configlexer.lex"
48054982 { YDVAR(1, VAR_CONTROL_KEY_FILE) }
48064983 YY_BREAK
4807 case 204:
4808 YY_RULE_SETUP
4809 #line 412 "util/configlexer.lex"
4984 case 207:
4985 YY_RULE_SETUP
4986 #line 422 "util/configlexer.lex"
48104987 { YDVAR(1, VAR_CONTROL_CERT_FILE) }
48114988 YY_BREAK
4812 case 205:
4813 YY_RULE_SETUP
4814 #line 413 "util/configlexer.lex"
4989 case 208:
4990 YY_RULE_SETUP
4991 #line 423 "util/configlexer.lex"
48154992 { YDVAR(1, VAR_PYTHON_SCRIPT) }
48164993 YY_BREAK
4817 case 206:
4818 YY_RULE_SETUP
4819 #line 414 "util/configlexer.lex"
4994 case 209:
4995 YY_RULE_SETUP
4996 #line 424 "util/configlexer.lex"
48204997 { YDVAR(0, VAR_PYTHON) }
48214998 YY_BREAK
4822 case 207:
4823 YY_RULE_SETUP
4824 #line 415 "util/configlexer.lex"
4999 case 210:
5000 YY_RULE_SETUP
5001 #line 425 "util/configlexer.lex"
5002 { YDVAR(1, VAR_DYNLIB_FILE) }
5003 YY_BREAK
5004 case 211:
5005 YY_RULE_SETUP
5006 #line 426 "util/configlexer.lex"
5007 { YDVAR(0, VAR_DYNLIB) }
5008 YY_BREAK
5009 case 212:
5010 YY_RULE_SETUP
5011 #line 427 "util/configlexer.lex"
48255012 { YDVAR(1, VAR_DOMAIN_INSECURE) }
48265013 YY_BREAK
4827 case 208:
4828 YY_RULE_SETUP
4829 #line 416 "util/configlexer.lex"
5014 case 213:
5015 YY_RULE_SETUP
5016 #line 428 "util/configlexer.lex"
48305017 { YDVAR(1, VAR_MINIMAL_RESPONSES) }
48315018 YY_BREAK
4832 case 209:
4833 YY_RULE_SETUP
4834 #line 417 "util/configlexer.lex"
5019 case 214:
5020 YY_RULE_SETUP
5021 #line 429 "util/configlexer.lex"
48355022 { YDVAR(1, VAR_RRSET_ROUNDROBIN) }
48365023 YY_BREAK
4837 case 210:
4838 YY_RULE_SETUP
4839 #line 418 "util/configlexer.lex"
5024 case 215:
5025 YY_RULE_SETUP
5026 #line 430 "util/configlexer.lex"
48405027 { YDVAR(1, VAR_UNKNOWN_SERVER_TIME_LIMIT) }
48415028 YY_BREAK
4842 case 211:
4843 YY_RULE_SETUP
4844 #line 419 "util/configlexer.lex"
5029 case 216:
5030 YY_RULE_SETUP
5031 #line 431 "util/configlexer.lex"
48455032 { YDVAR(1, VAR_MAX_UDP_SIZE) }
48465033 YY_BREAK
4847 case 212:
4848 YY_RULE_SETUP
4849 #line 420 "util/configlexer.lex"
5034 case 217:
5035 YY_RULE_SETUP
5036 #line 432 "util/configlexer.lex"
48505037 { YDVAR(1, VAR_DNS64_PREFIX) }
48515038 YY_BREAK
4852 case 213:
4853 YY_RULE_SETUP
4854 #line 421 "util/configlexer.lex"
5039 case 218:
5040 YY_RULE_SETUP
5041 #line 433 "util/configlexer.lex"
48555042 { YDVAR(1, VAR_DNS64_SYNTHALL) }
48565043 YY_BREAK
4857 case 214:
4858 YY_RULE_SETUP
4859 #line 422 "util/configlexer.lex"
5044 case 219:
5045 YY_RULE_SETUP
5046 #line 434 "util/configlexer.lex"
48605047 { YDVAR(1, VAR_DNS64_IGNORE_AAAA) }
48615048 YY_BREAK
4862 case 215:
4863 YY_RULE_SETUP
4864 #line 423 "util/configlexer.lex"
5049 case 220:
5050 YY_RULE_SETUP
5051 #line 435 "util/configlexer.lex"
48655052 { YDVAR(1, VAR_DEFINE_TAG) }
48665053 YY_BREAK
4867 case 216:
4868 YY_RULE_SETUP
4869 #line 424 "util/configlexer.lex"
5054 case 221:
5055 YY_RULE_SETUP
5056 #line 436 "util/configlexer.lex"
48705057 { YDVAR(2, VAR_LOCAL_ZONE_TAG) }
48715058 YY_BREAK
4872 case 217:
4873 YY_RULE_SETUP
4874 #line 425 "util/configlexer.lex"
5059 case 222:
5060 YY_RULE_SETUP
5061 #line 437 "util/configlexer.lex"
48755062 { YDVAR(2, VAR_ACCESS_CONTROL_TAG) }
48765063 YY_BREAK
4877 case 218:
4878 YY_RULE_SETUP
4879 #line 426 "util/configlexer.lex"
5064 case 223:
5065 YY_RULE_SETUP
5066 #line 438 "util/configlexer.lex"
48805067 { YDVAR(3, VAR_ACCESS_CONTROL_TAG_ACTION) }
48815068 YY_BREAK
4882 case 219:
4883 YY_RULE_SETUP
4884 #line 427 "util/configlexer.lex"
5069 case 224:
5070 YY_RULE_SETUP
5071 #line 439 "util/configlexer.lex"
48855072 { YDVAR(3, VAR_ACCESS_CONTROL_TAG_DATA) }
48865073 YY_BREAK
4887 case 220:
4888 YY_RULE_SETUP
4889 #line 428 "util/configlexer.lex"
5074 case 225:
5075 YY_RULE_SETUP
5076 #line 440 "util/configlexer.lex"
48905077 { YDVAR(2, VAR_ACCESS_CONTROL_VIEW) }
48915078 YY_BREAK
4892 case 221:
4893 YY_RULE_SETUP
4894 #line 429 "util/configlexer.lex"
5079 case 226:
5080 YY_RULE_SETUP
5081 #line 441 "util/configlexer.lex"
48955082 { YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
48965083 YY_BREAK
4897 case 222:
4898 YY_RULE_SETUP
4899 #line 430 "util/configlexer.lex"
5084 case 227:
5085 YY_RULE_SETUP
5086 #line 442 "util/configlexer.lex"
49005087 { YDVAR(0, VAR_DNSTAP) }
49015088 YY_BREAK
4902 case 223:
4903 YY_RULE_SETUP
4904 #line 431 "util/configlexer.lex"
5089 case 228:
5090 YY_RULE_SETUP
5091 #line 443 "util/configlexer.lex"
49055092 { YDVAR(1, VAR_DNSTAP_ENABLE) }
49065093 YY_BREAK
4907 case 224:
4908 YY_RULE_SETUP
4909 #line 432 "util/configlexer.lex"
5094 case 229:
5095 YY_RULE_SETUP
5096 #line 444 "util/configlexer.lex"
5097 { YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) }
5098 YY_BREAK
5099 case 230:
5100 YY_RULE_SETUP
5101 #line 445 "util/configlexer.lex"
49105102 { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
49115103 YY_BREAK
4912 case 225:
4913 YY_RULE_SETUP
4914 #line 433 "util/configlexer.lex"
5104 case 231:
5105 YY_RULE_SETUP
5106 #line 446 "util/configlexer.lex"
5107 { YDVAR(1, VAR_DNSTAP_IP) }
5108 YY_BREAK
5109 case 232:
5110 YY_RULE_SETUP
5111 #line 447 "util/configlexer.lex"
5112 { YDVAR(1, VAR_DNSTAP_TLS) }
5113 YY_BREAK
5114 case 233:
5115 YY_RULE_SETUP
5116 #line 448 "util/configlexer.lex"
5117 { YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) }
5118 YY_BREAK
5119 case 234:
5120 YY_RULE_SETUP
5121 #line 449 "util/configlexer.lex"
5122 { YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) }
5123 YY_BREAK
5124 case 235:
5125 YY_RULE_SETUP
5126 #line 450 "util/configlexer.lex"
5127 {
5128 YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) }
5129 YY_BREAK
5130 case 236:
5131 YY_RULE_SETUP
5132 #line 452 "util/configlexer.lex"
5133 {
5134 YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) }
5135 YY_BREAK
5136 case 237:
5137 YY_RULE_SETUP
5138 #line 454 "util/configlexer.lex"
49155139 { YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
49165140 YY_BREAK
4917 case 226:
4918 YY_RULE_SETUP
4919 #line 434 "util/configlexer.lex"
5141 case 238:
5142 YY_RULE_SETUP
5143 #line 455 "util/configlexer.lex"
49205144 { YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
49215145 YY_BREAK
4922 case 227:
4923 YY_RULE_SETUP
4924 #line 435 "util/configlexer.lex"
5146 case 239:
5147 YY_RULE_SETUP
5148 #line 456 "util/configlexer.lex"
49255149 { YDVAR(1, VAR_DNSTAP_IDENTITY) }
49265150 YY_BREAK
4927 case 228:
4928 YY_RULE_SETUP
4929 #line 436 "util/configlexer.lex"
5151 case 240:
5152 YY_RULE_SETUP
5153 #line 457 "util/configlexer.lex"
49305154 { YDVAR(1, VAR_DNSTAP_VERSION) }
49315155 YY_BREAK
4932 case 229:
4933 YY_RULE_SETUP
4934 #line 437 "util/configlexer.lex"
5156 case 241:
5157 YY_RULE_SETUP
5158 #line 458 "util/configlexer.lex"
49355159 {
49365160 YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES) }
49375161 YY_BREAK
4938 case 230:
4939 YY_RULE_SETUP
4940 #line 439 "util/configlexer.lex"
5162 case 242:
5163 YY_RULE_SETUP
5164 #line 460 "util/configlexer.lex"
49415165 {
49425166 YDVAR(1, VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES) }
49435167 YY_BREAK
4944 case 231:
4945 YY_RULE_SETUP
4946 #line 441 "util/configlexer.lex"
5168 case 243:
5169 YY_RULE_SETUP
5170 #line 462 "util/configlexer.lex"
49475171 {
49485172 YDVAR(1, VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES) }
49495173 YY_BREAK
4950 case 232:
4951 YY_RULE_SETUP
4952 #line 443 "util/configlexer.lex"
5174 case 244:
5175 YY_RULE_SETUP
5176 #line 464 "util/configlexer.lex"
49535177 {
49545178 YDVAR(1, VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES) }
49555179 YY_BREAK
4956 case 233:
4957 YY_RULE_SETUP
4958 #line 445 "util/configlexer.lex"
5180 case 245:
5181 YY_RULE_SETUP
5182 #line 466 "util/configlexer.lex"
49595183 {
49605184 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES) }
49615185 YY_BREAK
4962 case 234:
4963 YY_RULE_SETUP
4964 #line 447 "util/configlexer.lex"
5186 case 246:
5187 YY_RULE_SETUP
5188 #line 468 "util/configlexer.lex"
49655189 {
49665190 YDVAR(1, VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES) }
49675191 YY_BREAK
4968 case 235:
4969 YY_RULE_SETUP
4970 #line 449 "util/configlexer.lex"
5192 case 247:
5193 YY_RULE_SETUP
5194 #line 470 "util/configlexer.lex"
49715195 { YDVAR(1, VAR_DISABLE_DNSSEC_LAME_CHECK) }
49725196 YY_BREAK
4973 case 236:
4974 YY_RULE_SETUP
4975 #line 450 "util/configlexer.lex"
5197 case 248:
5198 YY_RULE_SETUP
5199 #line 471 "util/configlexer.lex"
49765200 { YDVAR(1, VAR_IP_RATELIMIT) }
49775201 YY_BREAK
4978 case 237:
4979 YY_RULE_SETUP
4980 #line 451 "util/configlexer.lex"
5202 case 249:
5203 YY_RULE_SETUP
5204 #line 472 "util/configlexer.lex"
49815205 { YDVAR(1, VAR_RATELIMIT) }
49825206 YY_BREAK
4983 case 238:
4984 YY_RULE_SETUP
4985 #line 452 "util/configlexer.lex"
5207 case 250:
5208 YY_RULE_SETUP
5209 #line 473 "util/configlexer.lex"
49865210 { YDVAR(1, VAR_IP_RATELIMIT_SLABS) }
49875211 YY_BREAK
4988 case 239:
4989 YY_RULE_SETUP
4990 #line 453 "util/configlexer.lex"
5212 case 251:
5213 YY_RULE_SETUP
5214 #line 474 "util/configlexer.lex"
49915215 { YDVAR(1, VAR_RATELIMIT_SLABS) }
49925216 YY_BREAK
4993 case 240:
4994 YY_RULE_SETUP
4995 #line 454 "util/configlexer.lex"
5217 case 252:
5218 YY_RULE_SETUP
5219 #line 475 "util/configlexer.lex"
49965220 { YDVAR(1, VAR_IP_RATELIMIT_SIZE) }
49975221 YY_BREAK
4998 case 241:
4999 YY_RULE_SETUP
5000 #line 455 "util/configlexer.lex"
5222 case 253:
5223 YY_RULE_SETUP
5224 #line 476 "util/configlexer.lex"
50015225 { YDVAR(1, VAR_RATELIMIT_SIZE) }
50025226 YY_BREAK
5003 case 242:
5004 YY_RULE_SETUP
5005 #line 456 "util/configlexer.lex"
5227 case 254:
5228 YY_RULE_SETUP
5229 #line 477 "util/configlexer.lex"
50065230 { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
50075231 YY_BREAK
5008 case 243:
5009 YY_RULE_SETUP
5010 #line 457 "util/configlexer.lex"
5232 case 255:
5233 YY_RULE_SETUP
5234 #line 478 "util/configlexer.lex"
50115235 { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
50125236 YY_BREAK
5013 case 244:
5014 YY_RULE_SETUP
5015 #line 458 "util/configlexer.lex"
5237 case 256:
5238 YY_RULE_SETUP
5239 #line 479 "util/configlexer.lex"
50165240 { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
50175241 YY_BREAK
5018 case 245:
5019 YY_RULE_SETUP
5020 #line 459 "util/configlexer.lex"
5242 case 257:
5243 YY_RULE_SETUP
5244 #line 480 "util/configlexer.lex"
50215245 { YDVAR(1, VAR_RATELIMIT_FACTOR) }
50225246 YY_BREAK
5023 case 246:
5024 YY_RULE_SETUP
5025 #line 460 "util/configlexer.lex"
5247 case 258:
5248 YY_RULE_SETUP
5249 #line 481 "util/configlexer.lex"
50265250 { YDVAR(1, VAR_LOW_RTT) }
50275251 YY_BREAK
5028 case 247:
5029 YY_RULE_SETUP
5030 #line 461 "util/configlexer.lex"
5252 case 259:
5253 YY_RULE_SETUP
5254 #line 482 "util/configlexer.lex"
50315255 { YDVAR(1, VAR_FAST_SERVER_NUM) }
50325256 YY_BREAK
5033 case 248:
5034 YY_RULE_SETUP
5035 #line 462 "util/configlexer.lex"
5257 case 260:
5258 YY_RULE_SETUP
5259 #line 483 "util/configlexer.lex"
50365260 { YDVAR(1, VAR_FAST_SERVER_PERMIL) }
50375261 YY_BREAK
5038 case 249:
5039 YY_RULE_SETUP
5040 #line 463 "util/configlexer.lex"
5262 case 261:
5263 YY_RULE_SETUP
5264 #line 484 "util/configlexer.lex"
50415265 { YDVAR(1, VAR_FAST_SERVER_PERMIL) }
50425266 YY_BREAK
5043 case 250:
5044 YY_RULE_SETUP
5045 #line 464 "util/configlexer.lex"
5267 case 262:
5268 YY_RULE_SETUP
5269 #line 485 "util/configlexer.lex"
50465270 { YDVAR(1, VAR_FAST_SERVER_PERMIL) }
50475271 YY_BREAK
5048 case 251:
5049 YY_RULE_SETUP
5050 #line 465 "util/configlexer.lex"
5272 case 263:
5273 YY_RULE_SETUP
5274 #line 486 "util/configlexer.lex"
50515275 { YDVAR(2, VAR_RESPONSE_IP_TAG) }
50525276 YY_BREAK
5053 case 252:
5054 YY_RULE_SETUP
5055 #line 466 "util/configlexer.lex"
5277 case 264:
5278 YY_RULE_SETUP
5279 #line 487 "util/configlexer.lex"
50565280 { YDVAR(2, VAR_RESPONSE_IP) }
50575281 YY_BREAK
5058 case 253:
5059 YY_RULE_SETUP
5060 #line 467 "util/configlexer.lex"
5282 case 265:
5283 YY_RULE_SETUP
5284 #line 488 "util/configlexer.lex"
50615285 { YDVAR(2, VAR_RESPONSE_IP_DATA) }
50625286 YY_BREAK
5063 case 254:
5064 YY_RULE_SETUP
5065 #line 468 "util/configlexer.lex"
5287 case 266:
5288 YY_RULE_SETUP
5289 #line 489 "util/configlexer.lex"
50665290 { YDVAR(0, VAR_DNSCRYPT) }
50675291 YY_BREAK
5068 case 255:
5069 YY_RULE_SETUP
5070 #line 469 "util/configlexer.lex"
5292 case 267:
5293 YY_RULE_SETUP
5294 #line 490 "util/configlexer.lex"
50715295 { YDVAR(1, VAR_DNSCRYPT_ENABLE) }
50725296 YY_BREAK
5073 case 256:
5074 YY_RULE_SETUP
5075 #line 470 "util/configlexer.lex"
5297 case 268:
5298 YY_RULE_SETUP
5299 #line 491 "util/configlexer.lex"
50765300 { YDVAR(1, VAR_DNSCRYPT_PORT) }
50775301 YY_BREAK
5078 case 257:
5079 YY_RULE_SETUP
5080 #line 471 "util/configlexer.lex"
5302 case 269:
5303 YY_RULE_SETUP
5304 #line 492 "util/configlexer.lex"
50815305 { YDVAR(1, VAR_DNSCRYPT_PROVIDER) }
50825306 YY_BREAK
5083 case 258:
5084 YY_RULE_SETUP
5085 #line 472 "util/configlexer.lex"
5307 case 270:
5308 YY_RULE_SETUP
5309 #line 493 "util/configlexer.lex"
50865310 { YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) }
50875311 YY_BREAK
5088 case 259:
5089 YY_RULE_SETUP
5090 #line 473 "util/configlexer.lex"
5312 case 271:
5313 YY_RULE_SETUP
5314 #line 494 "util/configlexer.lex"
50915315 { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) }
50925316 YY_BREAK
5093 case 260:
5094 YY_RULE_SETUP
5095 #line 474 "util/configlexer.lex"
5317 case 272:
5318 YY_RULE_SETUP
5319 #line 495 "util/configlexer.lex"
50965320 { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT_ROTATED) }
50975321 YY_BREAK
5098 case 261:
5099 YY_RULE_SETUP
5100 #line 475 "util/configlexer.lex"
5322 case 273:
5323 YY_RULE_SETUP
5324 #line 496 "util/configlexer.lex"
51015325 {
51025326 YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) }
51035327 YY_BREAK
5104 case 262:
5105 YY_RULE_SETUP
5106 #line 477 "util/configlexer.lex"
5328 case 274:
5329 YY_RULE_SETUP
5330 #line 498 "util/configlexer.lex"
51075331 {
51085332 YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) }
51095333 YY_BREAK
5110 case 263:
5111 YY_RULE_SETUP
5112 #line 479 "util/configlexer.lex"
5334 case 275:
5335 YY_RULE_SETUP
5336 #line 500 "util/configlexer.lex"
51135337 { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SIZE) }
51145338 YY_BREAK
5115 case 264:
5116 YY_RULE_SETUP
5117 #line 480 "util/configlexer.lex"
5339 case 276:
5340 YY_RULE_SETUP
5341 #line 501 "util/configlexer.lex"
51185342 { YDVAR(1, VAR_DNSCRYPT_NONCE_CACHE_SLABS) }
51195343 YY_BREAK
5120 case 265:
5121 YY_RULE_SETUP
5122 #line 481 "util/configlexer.lex"
5344 case 277:
5345 YY_RULE_SETUP
5346 #line 502 "util/configlexer.lex"
51235347 { YDVAR(1, VAR_IPSECMOD_ENABLED) }
51245348 YY_BREAK
5125 case 266:
5126 YY_RULE_SETUP
5127 #line 482 "util/configlexer.lex"
5349 case 278:
5350 YY_RULE_SETUP
5351 #line 503 "util/configlexer.lex"
51285352 { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) }
51295353 YY_BREAK
5130 case 267:
5131 YY_RULE_SETUP
5132 #line 483 "util/configlexer.lex"
5354 case 279:
5355 YY_RULE_SETUP
5356 #line 504 "util/configlexer.lex"
51335357 { YDVAR(1, VAR_IPSECMOD_HOOK) }
51345358 YY_BREAK
5135 case 268:
5136 YY_RULE_SETUP
5137 #line 484 "util/configlexer.lex"
5359 case 280:
5360 YY_RULE_SETUP
5361 #line 505 "util/configlexer.lex"
51385362 { YDVAR(1, VAR_IPSECMOD_MAX_TTL) }
51395363 YY_BREAK
5140 case 269:
5141 YY_RULE_SETUP
5142 #line 485 "util/configlexer.lex"
5364 case 281:
5365 YY_RULE_SETUP
5366 #line 506 "util/configlexer.lex"
51435367 { YDVAR(1, VAR_IPSECMOD_WHITELIST) }
51445368 YY_BREAK
5145 case 270:
5146 YY_RULE_SETUP
5147 #line 486 "util/configlexer.lex"
5369 case 282:
5370 YY_RULE_SETUP
5371 #line 507 "util/configlexer.lex"
51485372 { YDVAR(1, VAR_IPSECMOD_STRICT) }
51495373 YY_BREAK
5150 case 271:
5151 YY_RULE_SETUP
5152 #line 487 "util/configlexer.lex"
5374 case 283:
5375 YY_RULE_SETUP
5376 #line 508 "util/configlexer.lex"
51535377 { YDVAR(0, VAR_CACHEDB) }
51545378 YY_BREAK
5155 case 272:
5156 YY_RULE_SETUP
5157 #line 488 "util/configlexer.lex"
5379 case 284:
5380 YY_RULE_SETUP
5381 #line 509 "util/configlexer.lex"
51585382 { YDVAR(1, VAR_CACHEDB_BACKEND) }
51595383 YY_BREAK
5160 case 273:
5161 YY_RULE_SETUP
5162 #line 489 "util/configlexer.lex"
5384 case 285:
5385 YY_RULE_SETUP
5386 #line 510 "util/configlexer.lex"
51635387 { YDVAR(1, VAR_CACHEDB_SECRETSEED) }
51645388 YY_BREAK
5165 case 274:
5166 YY_RULE_SETUP
5167 #line 490 "util/configlexer.lex"
5389 case 286:
5390 YY_RULE_SETUP
5391 #line 511 "util/configlexer.lex"
51685392 { YDVAR(1, VAR_CACHEDB_REDISHOST) }
51695393 YY_BREAK
5170 case 275:
5171 YY_RULE_SETUP
5172 #line 491 "util/configlexer.lex"
5394 case 287:
5395 YY_RULE_SETUP
5396 #line 512 "util/configlexer.lex"
51735397 { YDVAR(1, VAR_CACHEDB_REDISPORT) }
51745398 YY_BREAK
5175 case 276:
5176 YY_RULE_SETUP
5177 #line 492 "util/configlexer.lex"
5399 case 288:
5400 YY_RULE_SETUP
5401 #line 513 "util/configlexer.lex"
51785402 { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
51795403 YY_BREAK
5180 case 277:
5181 YY_RULE_SETUP
5182 #line 493 "util/configlexer.lex"
5404 case 289:
5405 YY_RULE_SETUP
5406 #line 514 "util/configlexer.lex"
5407 { YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) }
5408 YY_BREAK
5409 case 290:
5410 YY_RULE_SETUP
5411 #line 515 "util/configlexer.lex"
51835412 { YDVAR(0, VAR_IPSET) }
51845413 YY_BREAK
5185 case 278:
5186 YY_RULE_SETUP
5187 #line 494 "util/configlexer.lex"
5414 case 291:
5415 YY_RULE_SETUP
5416 #line 516 "util/configlexer.lex"
51885417 { YDVAR(1, VAR_IPSET_NAME_V4) }
51895418 YY_BREAK
5190 case 279:
5191 YY_RULE_SETUP
5192 #line 495 "util/configlexer.lex"
5419 case 292:
5420 YY_RULE_SETUP
5421 #line 517 "util/configlexer.lex"
51935422 { YDVAR(1, VAR_IPSET_NAME_V6) }
51945423 YY_BREAK
5195 case 280:
5196 YY_RULE_SETUP
5197 #line 496 "util/configlexer.lex"
5424 case 293:
5425 YY_RULE_SETUP
5426 #line 518 "util/configlexer.lex"
51985427 { YDVAR(1, VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM) }
51995428 YY_BREAK
5200 case 281:
5201 YY_RULE_SETUP
5202 #line 497 "util/configlexer.lex"
5429 case 294:
5430 YY_RULE_SETUP
5431 #line 519 "util/configlexer.lex"
52035432 { YDVAR(2, VAR_TCP_CONNECTION_LIMIT) }
52045433 YY_BREAK
5205 case 282:
5206 /* rule 282 can match eol */
5207 YY_RULE_SETUP
5208 #line 498 "util/configlexer.lex"
5434 case 295:
5435 /* rule 295 can match eol */
5436 YY_RULE_SETUP
5437 #line 520 "util/configlexer.lex"
52095438 { LEXOUT(("NL\n")); cfg_parser->line++; }
52105439 YY_BREAK
52115440 /* Quoted strings. Strip leading and ending quotes */
5212 case 283:
5213 YY_RULE_SETUP
5214 #line 501 "util/configlexer.lex"
5441 case 296:
5442 YY_RULE_SETUP
5443 #line 523 "util/configlexer.lex"
52155444 { BEGIN(quotedstring); LEXOUT(("QS ")); }
52165445 YY_BREAK
52175446 case YY_STATE_EOF(quotedstring):
5218 #line 502 "util/configlexer.lex"
5447 #line 524 "util/configlexer.lex"
52195448 {
52205449 yyerror("EOF inside quoted string");
52215450 if(--num_args == 0) { BEGIN(INITIAL); }
52225451 else { BEGIN(val); }
52235452 }
52245453 YY_BREAK
5225 case 284:
5226 YY_RULE_SETUP
5227 #line 507 "util/configlexer.lex"
5454 case 297:
5455 YY_RULE_SETUP
5456 #line 529 "util/configlexer.lex"
52285457 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
52295458 YY_BREAK
5230 case 285:
5231 /* rule 285 can match eol */
5232 YY_RULE_SETUP
5233 #line 508 "util/configlexer.lex"
5459 case 298:
5460 /* rule 298 can match eol */
5461 YY_RULE_SETUP
5462 #line 530 "util/configlexer.lex"
52345463 { yyerror("newline inside quoted string, no end \"");
52355464 cfg_parser->line++; BEGIN(INITIAL); }
52365465 YY_BREAK
5237 case 286:
5238 YY_RULE_SETUP
5239 #line 510 "util/configlexer.lex"
5466 case 299:
5467 YY_RULE_SETUP
5468 #line 532 "util/configlexer.lex"
52405469 {
52415470 LEXOUT(("QE "));
52425471 if(--num_args == 0) { BEGIN(INITIAL); }
52495478 }
52505479 YY_BREAK
52515480 /* Single Quoted strings. Strip leading and ending quotes */
5252 case 287:
5253 YY_RULE_SETUP
5254 #line 522 "util/configlexer.lex"
5481 case 300:
5482 YY_RULE_SETUP
5483 #line 544 "util/configlexer.lex"
52555484 { BEGIN(singlequotedstr); LEXOUT(("SQS ")); }
52565485 YY_BREAK
52575486 case YY_STATE_EOF(singlequotedstr):
5258 #line 523 "util/configlexer.lex"
5487 #line 545 "util/configlexer.lex"
52595488 {
52605489 yyerror("EOF inside quoted string");
52615490 if(--num_args == 0) { BEGIN(INITIAL); }
52625491 else { BEGIN(val); }
52635492 }
52645493 YY_BREAK
5265 case 288:
5266 YY_RULE_SETUP
5267 #line 528 "util/configlexer.lex"
5494 case 301:
5495 YY_RULE_SETUP
5496 #line 550 "util/configlexer.lex"
52685497 { LEXOUT(("STR(%s) ", yytext)); yymore(); }
52695498 YY_BREAK
5270 case 289:
5271 /* rule 289 can match eol */
5272 YY_RULE_SETUP
5273 #line 529 "util/configlexer.lex"
5499 case 302:
5500 /* rule 302 can match eol */
5501 YY_RULE_SETUP
5502 #line 551 "util/configlexer.lex"
52745503 { yyerror("newline inside quoted string, no end '");
52755504 cfg_parser->line++; BEGIN(INITIAL); }
52765505 YY_BREAK
5277 case 290:
5278 YY_RULE_SETUP
5279 #line 531 "util/configlexer.lex"
5506 case 303:
5507 YY_RULE_SETUP
5508 #line 553 "util/configlexer.lex"
52805509 {
52815510 LEXOUT(("SQE "));
52825511 if(--num_args == 0) { BEGIN(INITIAL); }
52895518 }
52905519 YY_BREAK
52915520 /* include: directive */
5292 case 291:
5293 YY_RULE_SETUP
5294 #line 543 "util/configlexer.lex"
5521 case 304:
5522 YY_RULE_SETUP
5523 #line 565 "util/configlexer.lex"
52955524 {
52965525 LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); }
52975526 YY_BREAK
52985527 case YY_STATE_EOF(include):
5299 #line 545 "util/configlexer.lex"
5528 #line 567 "util/configlexer.lex"
53005529 {
53015530 yyerror("EOF inside include directive");
53025531 BEGIN(inc_prev);
53035532 }
53045533 YY_BREAK
5305 case 292:
5306 YY_RULE_SETUP
5307 #line 549 "util/configlexer.lex"
5534 case 305:
5535 YY_RULE_SETUP
5536 #line 571 "util/configlexer.lex"
53085537 { LEXOUT(("ISP ")); /* ignore */ }
53095538 YY_BREAK
5310 case 293:
5311 /* rule 293 can match eol */
5312 YY_RULE_SETUP
5313 #line 550 "util/configlexer.lex"
5539 case 306:
5540 /* rule 306 can match eol */
5541 YY_RULE_SETUP
5542 #line 572 "util/configlexer.lex"
53145543 { LEXOUT(("NL\n")); cfg_parser->line++;}
53155544 YY_BREAK
5316 case 294:
5317 YY_RULE_SETUP
5318 #line 551 "util/configlexer.lex"
5545 case 307:
5546 YY_RULE_SETUP
5547 #line 573 "util/configlexer.lex"
53195548 { LEXOUT(("IQS ")); BEGIN(include_quoted); }
53205549 YY_BREAK
5321 case 295:
5322 YY_RULE_SETUP
5323 #line 552 "util/configlexer.lex"
5550 case 308:
5551 YY_RULE_SETUP
5552 #line 574 "util/configlexer.lex"
53245553 {
53255554 LEXOUT(("Iunquotedstr(%s) ", yytext));
5326 config_start_include_glob(yytext);
5555 config_start_include_glob(yytext, 0);
53275556 BEGIN(inc_prev);
53285557 }
53295558 YY_BREAK
53305559 case YY_STATE_EOF(include_quoted):
5331 #line 557 "util/configlexer.lex"
5560 #line 579 "util/configlexer.lex"
53325561 {
53335562 yyerror("EOF inside quoted string");
53345563 BEGIN(inc_prev);
53355564 }
53365565 YY_BREAK
5337 case 296:
5338 YY_RULE_SETUP
5339 #line 561 "util/configlexer.lex"
5566 case 309:
5567 YY_RULE_SETUP
5568 #line 583 "util/configlexer.lex"
53405569 { LEXOUT(("ISTR(%s) ", yytext)); yymore(); }
53415570 YY_BREAK
5342 case 297:
5343 /* rule 297 can match eol */
5344 YY_RULE_SETUP
5345 #line 562 "util/configlexer.lex"
5571 case 310:
5572 /* rule 310 can match eol */
5573 YY_RULE_SETUP
5574 #line 584 "util/configlexer.lex"
53465575 { yyerror("newline before \" in include name");
53475576 cfg_parser->line++; BEGIN(inc_prev); }
53485577 YY_BREAK
5349 case 298:
5350 YY_RULE_SETUP
5351 #line 564 "util/configlexer.lex"
5578 case 311:
5579 YY_RULE_SETUP
5580 #line 586 "util/configlexer.lex"
53525581 {
53535582 LEXOUT(("IQE "));
53545583 yytext[yyleng - 1] = '\0';
5355 config_start_include_glob(yytext);
5584 config_start_include_glob(yytext, 0);
53565585 BEGIN(inc_prev);
53575586 }
53585587 YY_BREAK
53595588 case YY_STATE_EOF(INITIAL):
53605589 case YY_STATE_EOF(val):
5361 #line 570 "util/configlexer.lex"
5590 #line 592 "util/configlexer.lex"
53625591 {
53635592 LEXOUT(("LEXEOF "));
53645593 yy_set_bol(1); /* Set beginning of line, so "^" rules match. */
53655594 if (!config_include_stack) {
53665595 yyterminate();
53675596 } else {
5597 int prev_toplevel = inc_toplevel;
53685598 fclose(yyin);
53695599 config_end_include();
5600 if(prev_toplevel) return (VAR_FORCE_TOPLEVEL);
53705601 }
53715602 }
53725603 YY_BREAK
5373 case 299:
5374 YY_RULE_SETUP
5375 #line 581 "util/configlexer.lex"
5604 /* include-toplevel: directive */
5605 case 312:
5606 YY_RULE_SETUP
5607 #line 606 "util/configlexer.lex"
5608 {
5609 LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel);
5610 }
5611 YY_BREAK
5612 case YY_STATE_EOF(include_toplevel):
5613 #line 609 "util/configlexer.lex"
5614 {
5615 yyerror("EOF inside include_toplevel directive");
5616 BEGIN(inc_prev);
5617 }
5618 YY_BREAK
5619 case 313:
5620 YY_RULE_SETUP
5621 #line 613 "util/configlexer.lex"
5622 { LEXOUT(("ITSP ")); /* ignore */ }
5623 YY_BREAK
5624 case 314:
5625 /* rule 314 can match eol */
5626 YY_RULE_SETUP
5627 #line 614 "util/configlexer.lex"
5628 { LEXOUT(("NL\n")); cfg_parser->line++; }
5629 YY_BREAK
5630 case 315:
5631 YY_RULE_SETUP
5632 #line 615 "util/configlexer.lex"
5633 { LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); }
5634 YY_BREAK
5635 case 316:
5636 YY_RULE_SETUP
5637 #line 616 "util/configlexer.lex"
5638 {
5639 LEXOUT(("ITunquotedstr(%s) ", yytext));
5640 config_start_include_glob(yytext, 1);
5641 BEGIN(inc_prev);
5642 return (VAR_FORCE_TOPLEVEL);
5643 }
5644 YY_BREAK
5645 case YY_STATE_EOF(include_toplevel_quoted):
5646 #line 622 "util/configlexer.lex"
5647 {
5648 yyerror("EOF inside quoted string");
5649 BEGIN(inc_prev);
5650 }
5651 YY_BREAK
5652 case 317:
5653 YY_RULE_SETUP
5654 #line 626 "util/configlexer.lex"
5655 { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); }
5656 YY_BREAK
5657 case 318:
5658 /* rule 318 can match eol */
5659 YY_RULE_SETUP
5660 #line 627 "util/configlexer.lex"
5661 {
5662 yyerror("newline before \" in include name");
5663 cfg_parser->line++; BEGIN(inc_prev);
5664 }
5665 YY_BREAK
5666 case 319:
5667 YY_RULE_SETUP
5668 #line 631 "util/configlexer.lex"
5669 {
5670 LEXOUT(("ITQE "));
5671 yytext[yyleng - 1] = '\0';
5672 config_start_include_glob(yytext, 1);
5673 BEGIN(inc_prev);
5674 return (VAR_FORCE_TOPLEVEL);
5675 }
5676 YY_BREAK
5677 case 320:
5678 YY_RULE_SETUP
5679 #line 639 "util/configlexer.lex"
53765680 { LEXOUT(("unquotedstr(%s) ", yytext));
53775681 if(--num_args == 0) { BEGIN(INITIAL); }
53785682 yylval.str = strdup(yytext); return STRING_ARG; }
53795683 YY_BREAK
5380 case 300:
5381 YY_RULE_SETUP
5382 #line 585 "util/configlexer.lex"
5684 case 321:
5685 YY_RULE_SETUP
5686 #line 643 "util/configlexer.lex"
53835687 {
53845688 ub_c_error_msg("unknown keyword '%s'", yytext);
53855689 }
53865690 YY_BREAK
5387 case 301:
5388 YY_RULE_SETUP
5389 #line 589 "util/configlexer.lex"
5691 case 322:
5692 YY_RULE_SETUP
5693 #line 647 "util/configlexer.lex"
53905694 {
53915695 ub_c_error_msg("stray '%s'", yytext);
53925696 }
53935697 YY_BREAK
5394 case 302:
5395 YY_RULE_SETUP
5396 #line 593 "util/configlexer.lex"
5698 case 323:
5699 YY_RULE_SETUP
5700 #line 651 "util/configlexer.lex"
53975701 ECHO;
53985702 YY_BREAK
5399 #line 5398 "<stdout>"
5703 #line 5702 "<stdout>"
54005704
54015705 case YY_END_OF_BUFFER:
54025706 {
56915995 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
56925996 {
56935997 yy_current_state = (int) yy_def[yy_current_state];
5694 if ( yy_current_state >= 2986 )
5998 if ( yy_current_state >= 3137 )
56955999 yy_c = yy_meta[yy_c];
56966000 }
56976001 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
57196023 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
57206024 {
57216025 yy_current_state = (int) yy_def[yy_current_state];
5722 if ( yy_current_state >= 2986 )
6026 if ( yy_current_state >= 3137 )
57236027 yy_c = yy_meta[yy_c];
57246028 }
57256029 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
5726 yy_is_jam = (yy_current_state == 2985);
6030 yy_is_jam = (yy_current_state == 3136);
57276031
57286032 return yy_is_jam ? 0 : yy_current_state;
57296033 }
63626666
63636667 #define YYTABLES_NAME "yytables"
63646668
6365 #line 593 "util/configlexer.lex"
6366
6367
6669 #line 651 "util/configlexer.lex"
6670
6671
4444 int line;
4545 YY_BUFFER_STATE buffer;
4646 struct inc_state* next;
47 int inc_toplevel;
4748 };
4849 static struct inc_state* config_include_stack = NULL;
4950 static int inc_depth = 0;
5051 static int inc_prev = 0;
5152 static int num_args = 0;
53 static int inc_toplevel = 0;
5254
5355 void init_cfg_parse(void)
5456 {
5658 inc_depth = 0;
5759 inc_prev = 0;
5860 num_args = 0;
59 }
60
61 static void config_start_include(const char* filename)
61 inc_toplevel = 0;
62 }
63
64 static void config_start_include(const char* filename, int toplevel)
6265 {
6366 FILE *input;
6467 struct inc_state* s;
6568 char* nm;
66 if(inc_depth++ > 100000) {
69 if(inc_depth+1 > 100000) {
6770 ub_c_error_msg("too many include files");
6871 return;
6972 }
9598 return;
9699 }
97100 LEXOUT(("switch_to_include_file(%s)\n", filename));
101 inc_depth++;
98102 s->filename = cfg_parser->filename;
99103 s->line = cfg_parser->line;
100104 s->buffer = YY_CURRENT_BUFFER;
105 s->inc_toplevel = inc_toplevel;
101106 s->next = config_include_stack;
102107 config_include_stack = s;
103108 cfg_parser->filename = nm;
104109 cfg_parser->line = 1;
110 inc_toplevel = toplevel;
105111 yy_switch_to_buffer(yy_create_buffer(input, YY_BUF_SIZE));
106112 }
107113
108 static void config_start_include_glob(const char* filename)
114 static void config_start_include_glob(const char* filename, int toplevel)
109115 {
110116
111117 /* check for wildcards */
138144 globfree(&g);
139145 if(r == GLOB_NOMATCH)
140146 return; /* no matches for pattern */
141 config_start_include(filename); /* let original deal with it */
147 config_start_include(filename, toplevel); /* let original deal with it */
142148 return;
143149 }
144150 /* process files found, if any */
145151 for(i=(int)g.gl_pathc-1; i>=0; i--) {
146 config_start_include(g.gl_pathv[i]);
152 config_start_include(g.gl_pathv[i], toplevel);
147153 }
148154 globfree(&g);
149155 return;
150156 }
151157 #endif /* HAVE_GLOB */
152158
153 config_start_include(filename);
159 config_start_include(filename, toplevel);
154160 }
155161
156162 static void config_end_include(void)
164170 yy_delete_buffer(YY_CURRENT_BUFFER);
165171 yy_switch_to_buffer(s->buffer);
166172 config_include_stack = s->next;
173 inc_toplevel = s->inc_toplevel;
167174 free(s);
168175 }
169176
198205 DQANY [^\"\n\r\\]|\\.
199206 SQANY [^\'\n\r\\]|\\.
200207
201 %x quotedstring singlequotedstr include include_quoted val
208 %x quotedstring singlequotedstr include include_quoted val include_toplevel include_toplevel_quoted
202209
203210 %%
204211 <INITIAL,val>{SPACE}* {
219226 incoming-num-tcp{COLON} { YDVAR(1, VAR_INCOMING_NUM_TCP) }
220227 do-ip4{COLON} { YDVAR(1, VAR_DO_IP4) }
221228 do-ip6{COLON} { YDVAR(1, VAR_DO_IP6) }
229 prefer-ip4{COLON} { YDVAR(1, VAR_PREFER_IP4) }
222230 prefer-ip6{COLON} { YDVAR(1, VAR_PREFER_IP6) }
223231 do-udp{COLON} { YDVAR(1, VAR_DO_UDP) }
224232 do-tcp{COLON} { YDVAR(1, VAR_DO_TCP) }
246254 tls-session-ticket-keys{COLON} { YDVAR(1, VAR_TLS_SESSION_TICKET_KEYS) }
247255 tls-ciphers{COLON} { YDVAR(1, VAR_TLS_CIPHERS) }
248256 tls-ciphersuites{COLON} { YDVAR(1, VAR_TLS_CIPHERSUITES) }
257 tls-use-sni{COLON} { YDVAR(1, VAR_TLS_USE_SNI) }
249258 use-systemd{COLON} { YDVAR(1, VAR_USE_SYSTEMD) }
250259 do-daemonize{COLON} { YDVAR(1, VAR_DO_DAEMONIZE) }
251260 interface{COLON} { YDVAR(1, VAR_INTERFACE) }
257266 so-reuseport{COLON} { YDVAR(1, VAR_SO_REUSEPORT) }
258267 ip-transparent{COLON} { YDVAR(1, VAR_IP_TRANSPARENT) }
259268 ip-freebind{COLON} { YDVAR(1, VAR_IP_FREEBIND) }
269 ip-dscp{COLON} { YDVAR(1, VAR_IP_DSCP) }
260270 chroot{COLON} { YDVAR(1, VAR_CHROOT) }
261271 username{COLON} { YDVAR(1, VAR_USERNAME) }
262272 directory{COLON} { YDVAR(1, VAR_DIRECTORY) }
411421 control-cert-file{COLON} { YDVAR(1, VAR_CONTROL_CERT_FILE) }
412422 python-script{COLON} { YDVAR(1, VAR_PYTHON_SCRIPT) }
413423 python{COLON} { YDVAR(0, VAR_PYTHON) }
424 dynlib-file{COLON} { YDVAR(1, VAR_DYNLIB_FILE) }
425 dynlib{COLON} { YDVAR(0, VAR_DYNLIB) }
414426 domain-insecure{COLON} { YDVAR(1, VAR_DOMAIN_INSECURE) }
415427 minimal-responses{COLON} { YDVAR(1, VAR_MINIMAL_RESPONSES) }
416428 rrset-roundrobin{COLON} { YDVAR(1, VAR_RRSET_ROUNDROBIN) }
428440 local-zone-override{COLON} { YDVAR(3, VAR_LOCAL_ZONE_OVERRIDE) }
429441 dnstap{COLON} { YDVAR(0, VAR_DNSTAP) }
430442 dnstap-enable{COLON} { YDVAR(1, VAR_DNSTAP_ENABLE) }
443 dnstap-bidirectional{COLON} { YDVAR(1, VAR_DNSTAP_BIDIRECTIONAL) }
431444 dnstap-socket-path{COLON} { YDVAR(1, VAR_DNSTAP_SOCKET_PATH) }
445 dnstap-ip{COLON} { YDVAR(1, VAR_DNSTAP_IP) }
446 dnstap-tls{COLON} { YDVAR(1, VAR_DNSTAP_TLS) }
447 dnstap-tls-server-name{COLON} { YDVAR(1, VAR_DNSTAP_TLS_SERVER_NAME) }
448 dnstap-tls-cert-bundle{COLON} { YDVAR(1, VAR_DNSTAP_TLS_CERT_BUNDLE) }
449 dnstap-tls-client-key-file{COLON} {
450 YDVAR(1, VAR_DNSTAP_TLS_CLIENT_KEY_FILE) }
451 dnstap-tls-client-cert-file{COLON} {
452 YDVAR(1, VAR_DNSTAP_TLS_CLIENT_CERT_FILE) }
432453 dnstap-send-identity{COLON} { YDVAR(1, VAR_DNSTAP_SEND_IDENTITY) }
433454 dnstap-send-version{COLON} { YDVAR(1, VAR_DNSTAP_SEND_VERSION) }
434455 dnstap-identity{COLON} { YDVAR(1, VAR_DNSTAP_IDENTITY) }
489510 redis-server-host{COLON} { YDVAR(1, VAR_CACHEDB_REDISHOST) }
490511 redis-server-port{COLON} { YDVAR(1, VAR_CACHEDB_REDISPORT) }
491512 redis-timeout{COLON} { YDVAR(1, VAR_CACHEDB_REDISTIMEOUT) }
513 redis-expire-records{COLON} { YDVAR(1, VAR_CACHEDB_REDISEXPIRERECORDS) }
492514 ipset{COLON} { YDVAR(0, VAR_IPSET) }
493515 name-v4{COLON} { YDVAR(1, VAR_IPSET_NAME_V4) }
494516 name-v6{COLON} { YDVAR(1, VAR_IPSET_NAME_V6) }
550572 <include>\" { LEXOUT(("IQS ")); BEGIN(include_quoted); }
551573 <include>{UNQUOTEDLETTER}* {
552574 LEXOUT(("Iunquotedstr(%s) ", yytext));
553 config_start_include_glob(yytext);
575 config_start_include_glob(yytext, 0);
554576 BEGIN(inc_prev);
555577 }
556578 <include_quoted><<EOF>> {
563585 <include_quoted>\" {
564586 LEXOUT(("IQE "));
565587 yytext[yyleng - 1] = '\0';
566 config_start_include_glob(yytext);
588 config_start_include_glob(yytext, 0);
567589 BEGIN(inc_prev);
568590 }
569591 <INITIAL,val><<EOF>> {
572594 if (!config_include_stack) {
573595 yyterminate();
574596 } else {
597 int prev_toplevel = inc_toplevel;
575598 fclose(yyin);
576599 config_end_include();
577 }
600 if(prev_toplevel) return (VAR_FORCE_TOPLEVEL);
601 }
602 }
603
604 /* include-toplevel: directive */
605 <INITIAL,val>include-toplevel{COLON} {
606 LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include_toplevel);
607 }
608 <include_toplevel><<EOF>> {
609 yyerror("EOF inside include_toplevel directive");
610 BEGIN(inc_prev);
611 }
612 <include_toplevel>{SPACE}* { LEXOUT(("ITSP ")); /* ignore */ }
613 <include_toplevel>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; }
614 <include_toplevel>\" { LEXOUT(("ITQS ")); BEGIN(include_toplevel_quoted); }
615 <include_toplevel>{UNQUOTEDLETTER}* {
616 LEXOUT(("ITunquotedstr(%s) ", yytext));
617 config_start_include_glob(yytext, 1);
618 BEGIN(inc_prev);
619 return (VAR_FORCE_TOPLEVEL);
620 }
621 <include_toplevel_quoted><<EOF>> {
622 yyerror("EOF inside quoted string");
623 BEGIN(inc_prev);
624 }
625 <include_toplevel_quoted>{DQANY}* { LEXOUT(("ITSTR(%s) ", yytext)); yymore(); }
626 <include_toplevel_quoted>{NEWLINE} {
627 yyerror("newline before \" in include name");
628 cfg_parser->line++; BEGIN(inc_prev);
629 }
630 <include_toplevel_quoted>\" {
631 LEXOUT(("ITQE "));
632 yytext[yyleng - 1] = '\0';
633 config_start_include_glob(yytext, 1);
634 BEGIN(inc_prev);
635 return (VAR_FORCE_TOPLEVEL);
578636 }
579637
580638 <val>{UNQUOTEDLETTER}* { LEXOUT(("unquotedstr(%s) ", yytext));
141141 ANY = 263,
142142 ZONESTR = 264,
143143 STRING_ARG = 265,
144 VAR_SERVER = 266,
145 VAR_VERBOSITY = 267,
146 VAR_NUM_THREADS = 268,
147 VAR_PORT = 269,
148 VAR_OUTGOING_RANGE = 270,
149 VAR_INTERFACE = 271,
150 VAR_DO_IP4 = 272,
151 VAR_DO_IP6 = 273,
152 VAR_PREFER_IP6 = 274,
153 VAR_DO_UDP = 275,
154 VAR_DO_TCP = 276,
155 VAR_TCP_MSS = 277,
156 VAR_OUTGOING_TCP_MSS = 278,
157 VAR_TCP_IDLE_TIMEOUT = 279,
158 VAR_EDNS_TCP_KEEPALIVE = 280,
159 VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 281,
160 VAR_CHROOT = 282,
161 VAR_USERNAME = 283,
162 VAR_DIRECTORY = 284,
163 VAR_LOGFILE = 285,
164 VAR_PIDFILE = 286,
165 VAR_MSG_CACHE_SIZE = 287,
166 VAR_MSG_CACHE_SLABS = 288,
167 VAR_NUM_QUERIES_PER_THREAD = 289,
168 VAR_RRSET_CACHE_SIZE = 290,
169 VAR_RRSET_CACHE_SLABS = 291,
170 VAR_OUTGOING_NUM_TCP = 292,
171 VAR_INFRA_HOST_TTL = 293,
172 VAR_INFRA_LAME_TTL = 294,
173 VAR_INFRA_CACHE_SLABS = 295,
174 VAR_INFRA_CACHE_NUMHOSTS = 296,
175 VAR_INFRA_CACHE_LAME_SIZE = 297,
176 VAR_NAME = 298,
177 VAR_STUB_ZONE = 299,
178 VAR_STUB_HOST = 300,
179 VAR_STUB_ADDR = 301,
180 VAR_TARGET_FETCH_POLICY = 302,
181 VAR_HARDEN_SHORT_BUFSIZE = 303,
182 VAR_HARDEN_LARGE_QUERIES = 304,
183 VAR_FORWARD_ZONE = 305,
184 VAR_FORWARD_HOST = 306,
185 VAR_FORWARD_ADDR = 307,
186 VAR_DO_NOT_QUERY_ADDRESS = 308,
187 VAR_HIDE_IDENTITY = 309,
188 VAR_HIDE_VERSION = 310,
189 VAR_IDENTITY = 311,
190 VAR_VERSION = 312,
191 VAR_HARDEN_GLUE = 313,
192 VAR_MODULE_CONF = 314,
193 VAR_TRUST_ANCHOR_FILE = 315,
194 VAR_TRUST_ANCHOR = 316,
195 VAR_VAL_OVERRIDE_DATE = 317,
196 VAR_BOGUS_TTL = 318,
197 VAR_VAL_CLEAN_ADDITIONAL = 319,
198 VAR_VAL_PERMISSIVE_MODE = 320,
199 VAR_INCOMING_NUM_TCP = 321,
200 VAR_MSG_BUFFER_SIZE = 322,
201 VAR_KEY_CACHE_SIZE = 323,
202 VAR_KEY_CACHE_SLABS = 324,
203 VAR_TRUSTED_KEYS_FILE = 325,
204 VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 326,
205 VAR_USE_SYSLOG = 327,
206 VAR_OUTGOING_INTERFACE = 328,
207 VAR_ROOT_HINTS = 329,
208 VAR_DO_NOT_QUERY_LOCALHOST = 330,
209 VAR_CACHE_MAX_TTL = 331,
210 VAR_HARDEN_DNSSEC_STRIPPED = 332,
211 VAR_ACCESS_CONTROL = 333,
212 VAR_LOCAL_ZONE = 334,
213 VAR_LOCAL_DATA = 335,
214 VAR_INTERFACE_AUTOMATIC = 336,
215 VAR_STATISTICS_INTERVAL = 337,
216 VAR_DO_DAEMONIZE = 338,
217 VAR_USE_CAPS_FOR_ID = 339,
218 VAR_STATISTICS_CUMULATIVE = 340,
219 VAR_OUTGOING_PORT_PERMIT = 341,
220 VAR_OUTGOING_PORT_AVOID = 342,
221 VAR_DLV_ANCHOR_FILE = 343,
222 VAR_DLV_ANCHOR = 344,
223 VAR_NEG_CACHE_SIZE = 345,
224 VAR_HARDEN_REFERRAL_PATH = 346,
225 VAR_PRIVATE_ADDRESS = 347,
226 VAR_PRIVATE_DOMAIN = 348,
227 VAR_REMOTE_CONTROL = 349,
228 VAR_CONTROL_ENABLE = 350,
229 VAR_CONTROL_INTERFACE = 351,
230 VAR_CONTROL_PORT = 352,
231 VAR_SERVER_KEY_FILE = 353,
232 VAR_SERVER_CERT_FILE = 354,
233 VAR_CONTROL_KEY_FILE = 355,
234 VAR_CONTROL_CERT_FILE = 356,
235 VAR_CONTROL_USE_CERT = 357,
236 VAR_EXTENDED_STATISTICS = 358,
237 VAR_LOCAL_DATA_PTR = 359,
238 VAR_JOSTLE_TIMEOUT = 360,
239 VAR_STUB_PRIME = 361,
240 VAR_UNWANTED_REPLY_THRESHOLD = 362,
241 VAR_LOG_TIME_ASCII = 363,
242 VAR_DOMAIN_INSECURE = 364,
243 VAR_PYTHON = 365,
244 VAR_PYTHON_SCRIPT = 366,
245 VAR_VAL_SIG_SKEW_MIN = 367,
246 VAR_VAL_SIG_SKEW_MAX = 368,
247 VAR_CACHE_MIN_TTL = 369,
248 VAR_VAL_LOG_LEVEL = 370,
249 VAR_AUTO_TRUST_ANCHOR_FILE = 371,
250 VAR_KEEP_MISSING = 372,
251 VAR_ADD_HOLDDOWN = 373,
252 VAR_DEL_HOLDDOWN = 374,
253 VAR_SO_RCVBUF = 375,
254 VAR_EDNS_BUFFER_SIZE = 376,
255 VAR_PREFETCH = 377,
256 VAR_PREFETCH_KEY = 378,
257 VAR_SO_SNDBUF = 379,
258 VAR_SO_REUSEPORT = 380,
259 VAR_HARDEN_BELOW_NXDOMAIN = 381,
260 VAR_IGNORE_CD_FLAG = 382,
261 VAR_LOG_QUERIES = 383,
262 VAR_LOG_REPLIES = 384,
263 VAR_LOG_LOCAL_ACTIONS = 385,
264 VAR_TCP_UPSTREAM = 386,
265 VAR_SSL_UPSTREAM = 387,
266 VAR_SSL_SERVICE_KEY = 388,
267 VAR_SSL_SERVICE_PEM = 389,
268 VAR_SSL_PORT = 390,
269 VAR_FORWARD_FIRST = 391,
270 VAR_STUB_SSL_UPSTREAM = 392,
271 VAR_FORWARD_SSL_UPSTREAM = 393,
272 VAR_TLS_CERT_BUNDLE = 394,
273 VAR_STUB_FIRST = 395,
274 VAR_MINIMAL_RESPONSES = 396,
275 VAR_RRSET_ROUNDROBIN = 397,
276 VAR_MAX_UDP_SIZE = 398,
277 VAR_DELAY_CLOSE = 399,
278 VAR_UNBLOCK_LAN_ZONES = 400,
279 VAR_INSECURE_LAN_ZONES = 401,
280 VAR_INFRA_CACHE_MIN_RTT = 402,
281 VAR_DNS64_PREFIX = 403,
282 VAR_DNS64_SYNTHALL = 404,
283 VAR_DNS64_IGNORE_AAAA = 405,
284 VAR_DNSTAP = 406,
285 VAR_DNSTAP_ENABLE = 407,
286 VAR_DNSTAP_SOCKET_PATH = 408,
287 VAR_DNSTAP_SEND_IDENTITY = 409,
288 VAR_DNSTAP_SEND_VERSION = 410,
289 VAR_DNSTAP_IDENTITY = 411,
290 VAR_DNSTAP_VERSION = 412,
291 VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 413,
292 VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 414,
293 VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 415,
294 VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 416,
295 VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 417,
296 VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 418,
297 VAR_RESPONSE_IP_TAG = 419,
298 VAR_RESPONSE_IP = 420,
299 VAR_RESPONSE_IP_DATA = 421,
300 VAR_HARDEN_ALGO_DOWNGRADE = 422,
301 VAR_IP_TRANSPARENT = 423,
302 VAR_DISABLE_DNSSEC_LAME_CHECK = 424,
303 VAR_IP_RATELIMIT = 425,
304 VAR_IP_RATELIMIT_SLABS = 426,
305 VAR_IP_RATELIMIT_SIZE = 427,
306 VAR_RATELIMIT = 428,
307 VAR_RATELIMIT_SLABS = 429,
308 VAR_RATELIMIT_SIZE = 430,
309 VAR_RATELIMIT_FOR_DOMAIN = 431,
310 VAR_RATELIMIT_BELOW_DOMAIN = 432,
311 VAR_IP_RATELIMIT_FACTOR = 433,
312 VAR_RATELIMIT_FACTOR = 434,
313 VAR_SEND_CLIENT_SUBNET = 435,
314 VAR_CLIENT_SUBNET_ZONE = 436,
315 VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 437,
316 VAR_CLIENT_SUBNET_OPCODE = 438,
317 VAR_MAX_CLIENT_SUBNET_IPV4 = 439,
318 VAR_MAX_CLIENT_SUBNET_IPV6 = 440,
319 VAR_MIN_CLIENT_SUBNET_IPV4 = 441,
320 VAR_MIN_CLIENT_SUBNET_IPV6 = 442,
321 VAR_MAX_ECS_TREE_SIZE_IPV4 = 443,
322 VAR_MAX_ECS_TREE_SIZE_IPV6 = 444,
323 VAR_CAPS_WHITELIST = 445,
324 VAR_CACHE_MAX_NEGATIVE_TTL = 446,
325 VAR_PERMIT_SMALL_HOLDDOWN = 447,
326 VAR_QNAME_MINIMISATION = 448,
327 VAR_QNAME_MINIMISATION_STRICT = 449,
328 VAR_IP_FREEBIND = 450,
329 VAR_DEFINE_TAG = 451,
330 VAR_LOCAL_ZONE_TAG = 452,
331 VAR_ACCESS_CONTROL_TAG = 453,
332 VAR_LOCAL_ZONE_OVERRIDE = 454,
333 VAR_ACCESS_CONTROL_TAG_ACTION = 455,
334 VAR_ACCESS_CONTROL_TAG_DATA = 456,
335 VAR_VIEW = 457,
336 VAR_ACCESS_CONTROL_VIEW = 458,
337 VAR_VIEW_FIRST = 459,
338 VAR_SERVE_EXPIRED = 460,
339 VAR_SERVE_EXPIRED_TTL = 461,
340 VAR_SERVE_EXPIRED_TTL_RESET = 462,
341 VAR_SERVE_EXPIRED_REPLY_TTL = 463,
342 VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 464,
343 VAR_FAKE_DSA = 465,
344 VAR_FAKE_SHA1 = 466,
345 VAR_LOG_IDENTITY = 467,
346 VAR_HIDE_TRUSTANCHOR = 468,
347 VAR_TRUST_ANCHOR_SIGNALING = 469,
348 VAR_AGGRESSIVE_NSEC = 470,
349 VAR_USE_SYSTEMD = 471,
350 VAR_SHM_ENABLE = 472,
351 VAR_SHM_KEY = 473,
352 VAR_ROOT_KEY_SENTINEL = 474,
353 VAR_DNSCRYPT = 475,
354 VAR_DNSCRYPT_ENABLE = 476,
355 VAR_DNSCRYPT_PORT = 477,
356 VAR_DNSCRYPT_PROVIDER = 478,
357 VAR_DNSCRYPT_SECRET_KEY = 479,
358 VAR_DNSCRYPT_PROVIDER_CERT = 480,
359 VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 481,
360 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 482,
361 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 483,
362 VAR_DNSCRYPT_NONCE_CACHE_SIZE = 484,
363 VAR_DNSCRYPT_NONCE_CACHE_SLABS = 485,
364 VAR_IPSECMOD_ENABLED = 486,
365 VAR_IPSECMOD_HOOK = 487,
366 VAR_IPSECMOD_IGNORE_BOGUS = 488,
367 VAR_IPSECMOD_MAX_TTL = 489,
368 VAR_IPSECMOD_WHITELIST = 490,
369 VAR_IPSECMOD_STRICT = 491,
370 VAR_CACHEDB = 492,
371 VAR_CACHEDB_BACKEND = 493,
372 VAR_CACHEDB_SECRETSEED = 494,
373 VAR_CACHEDB_REDISHOST = 495,
374 VAR_CACHEDB_REDISPORT = 496,
375 VAR_CACHEDB_REDISTIMEOUT = 497,
376 VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 498,
377 VAR_FOR_UPSTREAM = 499,
378 VAR_AUTH_ZONE = 500,
379 VAR_ZONEFILE = 501,
380 VAR_MASTER = 502,
381 VAR_URL = 503,
382 VAR_FOR_DOWNSTREAM = 504,
383 VAR_FALLBACK_ENABLED = 505,
384 VAR_TLS_ADDITIONAL_PORT = 506,
385 VAR_LOW_RTT = 507,
386 VAR_LOW_RTT_PERMIL = 508,
387 VAR_FAST_SERVER_PERMIL = 509,
388 VAR_FAST_SERVER_NUM = 510,
389 VAR_ALLOW_NOTIFY = 511,
390 VAR_TLS_WIN_CERT = 512,
391 VAR_TCP_CONNECTION_LIMIT = 513,
392 VAR_FORWARD_NO_CACHE = 514,
393 VAR_STUB_NO_CACHE = 515,
394 VAR_LOG_SERVFAIL = 516,
395 VAR_DENY_ANY = 517,
396 VAR_UNKNOWN_SERVER_TIME_LIMIT = 518,
397 VAR_LOG_TAG_QUERYREPLY = 519,
398 VAR_STREAM_WAIT_SIZE = 520,
399 VAR_TLS_CIPHERS = 521,
400 VAR_TLS_CIPHERSUITES = 522,
401 VAR_IPSET = 523,
402 VAR_IPSET_NAME_V4 = 524,
403 VAR_IPSET_NAME_V6 = 525,
404 VAR_TLS_SESSION_TICKET_KEYS = 526,
405 VAR_RPZ = 527,
406 VAR_TAGS = 528,
407 VAR_RPZ_ACTION_OVERRIDE = 529,
408 VAR_RPZ_CNAME_OVERRIDE = 530,
409 VAR_RPZ_LOG = 531,
410 VAR_RPZ_LOG_NAME = 532
144 VAR_FORCE_TOPLEVEL = 266,
145 VAR_SERVER = 267,
146 VAR_VERBOSITY = 268,
147 VAR_NUM_THREADS = 269,
148 VAR_PORT = 270,
149 VAR_OUTGOING_RANGE = 271,
150 VAR_INTERFACE = 272,
151 VAR_PREFER_IP4 = 273,
152 VAR_DO_IP4 = 274,
153 VAR_DO_IP6 = 275,
154 VAR_PREFER_IP6 = 276,
155 VAR_DO_UDP = 277,
156 VAR_DO_TCP = 278,
157 VAR_TCP_MSS = 279,
158 VAR_OUTGOING_TCP_MSS = 280,
159 VAR_TCP_IDLE_TIMEOUT = 281,
160 VAR_EDNS_TCP_KEEPALIVE = 282,
161 VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283,
162 VAR_CHROOT = 284,
163 VAR_USERNAME = 285,
164 VAR_DIRECTORY = 286,
165 VAR_LOGFILE = 287,
166 VAR_PIDFILE = 288,
167 VAR_MSG_CACHE_SIZE = 289,
168 VAR_MSG_CACHE_SLABS = 290,
169 VAR_NUM_QUERIES_PER_THREAD = 291,
170 VAR_RRSET_CACHE_SIZE = 292,
171 VAR_RRSET_CACHE_SLABS = 293,
172 VAR_OUTGOING_NUM_TCP = 294,
173 VAR_INFRA_HOST_TTL = 295,
174 VAR_INFRA_LAME_TTL = 296,
175 VAR_INFRA_CACHE_SLABS = 297,
176 VAR_INFRA_CACHE_NUMHOSTS = 298,
177 VAR_INFRA_CACHE_LAME_SIZE = 299,
178 VAR_NAME = 300,
179 VAR_STUB_ZONE = 301,
180 VAR_STUB_HOST = 302,
181 VAR_STUB_ADDR = 303,
182 VAR_TARGET_FETCH_POLICY = 304,
183 VAR_HARDEN_SHORT_BUFSIZE = 305,
184 VAR_HARDEN_LARGE_QUERIES = 306,
185 VAR_FORWARD_ZONE = 307,
186 VAR_FORWARD_HOST = 308,
187 VAR_FORWARD_ADDR = 309,
188 VAR_DO_NOT_QUERY_ADDRESS = 310,
189 VAR_HIDE_IDENTITY = 311,
190 VAR_HIDE_VERSION = 312,
191 VAR_IDENTITY = 313,
192 VAR_VERSION = 314,
193 VAR_HARDEN_GLUE = 315,
194 VAR_MODULE_CONF = 316,
195 VAR_TRUST_ANCHOR_FILE = 317,
196 VAR_TRUST_ANCHOR = 318,
197 VAR_VAL_OVERRIDE_DATE = 319,
198 VAR_BOGUS_TTL = 320,
199 VAR_VAL_CLEAN_ADDITIONAL = 321,
200 VAR_VAL_PERMISSIVE_MODE = 322,
201 VAR_INCOMING_NUM_TCP = 323,
202 VAR_MSG_BUFFER_SIZE = 324,
203 VAR_KEY_CACHE_SIZE = 325,
204 VAR_KEY_CACHE_SLABS = 326,
205 VAR_TRUSTED_KEYS_FILE = 327,
206 VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328,
207 VAR_USE_SYSLOG = 329,
208 VAR_OUTGOING_INTERFACE = 330,
209 VAR_ROOT_HINTS = 331,
210 VAR_DO_NOT_QUERY_LOCALHOST = 332,
211 VAR_CACHE_MAX_TTL = 333,
212 VAR_HARDEN_DNSSEC_STRIPPED = 334,
213 VAR_ACCESS_CONTROL = 335,
214 VAR_LOCAL_ZONE = 336,
215 VAR_LOCAL_DATA = 337,
216 VAR_INTERFACE_AUTOMATIC = 338,
217 VAR_STATISTICS_INTERVAL = 339,
218 VAR_DO_DAEMONIZE = 340,
219 VAR_USE_CAPS_FOR_ID = 341,
220 VAR_STATISTICS_CUMULATIVE = 342,
221 VAR_OUTGOING_PORT_PERMIT = 343,
222 VAR_OUTGOING_PORT_AVOID = 344,
223 VAR_DLV_ANCHOR_FILE = 345,
224 VAR_DLV_ANCHOR = 346,
225 VAR_NEG_CACHE_SIZE = 347,
226 VAR_HARDEN_REFERRAL_PATH = 348,
227 VAR_PRIVATE_ADDRESS = 349,
228 VAR_PRIVATE_DOMAIN = 350,
229 VAR_REMOTE_CONTROL = 351,
230 VAR_CONTROL_ENABLE = 352,
231 VAR_CONTROL_INTERFACE = 353,
232 VAR_CONTROL_PORT = 354,
233 VAR_SERVER_KEY_FILE = 355,
234 VAR_SERVER_CERT_FILE = 356,
235 VAR_CONTROL_KEY_FILE = 357,
236 VAR_CONTROL_CERT_FILE = 358,
237 VAR_CONTROL_USE_CERT = 359,
238 VAR_EXTENDED_STATISTICS = 360,
239 VAR_LOCAL_DATA_PTR = 361,
240 VAR_JOSTLE_TIMEOUT = 362,
241 VAR_STUB_PRIME = 363,
242 VAR_UNWANTED_REPLY_THRESHOLD = 364,
243 VAR_LOG_TIME_ASCII = 365,
244 VAR_DOMAIN_INSECURE = 366,
245 VAR_PYTHON = 367,
246 VAR_PYTHON_SCRIPT = 368,
247 VAR_VAL_SIG_SKEW_MIN = 369,
248 VAR_VAL_SIG_SKEW_MAX = 370,
249 VAR_CACHE_MIN_TTL = 371,
250 VAR_VAL_LOG_LEVEL = 372,
251 VAR_AUTO_TRUST_ANCHOR_FILE = 373,
252 VAR_KEEP_MISSING = 374,
253 VAR_ADD_HOLDDOWN = 375,
254 VAR_DEL_HOLDDOWN = 376,
255 VAR_SO_RCVBUF = 377,
256 VAR_EDNS_BUFFER_SIZE = 378,
257 VAR_PREFETCH = 379,
258 VAR_PREFETCH_KEY = 380,
259 VAR_SO_SNDBUF = 381,
260 VAR_SO_REUSEPORT = 382,
261 VAR_HARDEN_BELOW_NXDOMAIN = 383,
262 VAR_IGNORE_CD_FLAG = 384,
263 VAR_LOG_QUERIES = 385,
264 VAR_LOG_REPLIES = 386,
265 VAR_LOG_LOCAL_ACTIONS = 387,
266 VAR_TCP_UPSTREAM = 388,
267 VAR_SSL_UPSTREAM = 389,
268 VAR_SSL_SERVICE_KEY = 390,
269 VAR_SSL_SERVICE_PEM = 391,
270 VAR_SSL_PORT = 392,
271 VAR_FORWARD_FIRST = 393,
272 VAR_STUB_SSL_UPSTREAM = 394,
273 VAR_FORWARD_SSL_UPSTREAM = 395,
274 VAR_TLS_CERT_BUNDLE = 396,
275 VAR_STUB_FIRST = 397,
276 VAR_MINIMAL_RESPONSES = 398,
277 VAR_RRSET_ROUNDROBIN = 399,
278 VAR_MAX_UDP_SIZE = 400,
279 VAR_DELAY_CLOSE = 401,
280 VAR_UNBLOCK_LAN_ZONES = 402,
281 VAR_INSECURE_LAN_ZONES = 403,
282 VAR_INFRA_CACHE_MIN_RTT = 404,
283 VAR_DNS64_PREFIX = 405,
284 VAR_DNS64_SYNTHALL = 406,
285 VAR_DNS64_IGNORE_AAAA = 407,
286 VAR_DNSTAP = 408,
287 VAR_DNSTAP_ENABLE = 409,
288 VAR_DNSTAP_SOCKET_PATH = 410,
289 VAR_DNSTAP_IP = 411,
290 VAR_DNSTAP_TLS = 412,
291 VAR_DNSTAP_TLS_SERVER_NAME = 413,
292 VAR_DNSTAP_TLS_CERT_BUNDLE = 414,
293 VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 415,
294 VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 416,
295 VAR_DNSTAP_SEND_IDENTITY = 417,
296 VAR_DNSTAP_SEND_VERSION = 418,
297 VAR_DNSTAP_BIDIRECTIONAL = 419,
298 VAR_DNSTAP_IDENTITY = 420,
299 VAR_DNSTAP_VERSION = 421,
300 VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 422,
301 VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 423,
302 VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 424,
303 VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 425,
304 VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 426,
305 VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 427,
306 VAR_RESPONSE_IP_TAG = 428,
307 VAR_RESPONSE_IP = 429,
308 VAR_RESPONSE_IP_DATA = 430,
309 VAR_HARDEN_ALGO_DOWNGRADE = 431,
310 VAR_IP_TRANSPARENT = 432,
311 VAR_IP_DSCP = 433,
312 VAR_DISABLE_DNSSEC_LAME_CHECK = 434,
313 VAR_IP_RATELIMIT = 435,
314 VAR_IP_RATELIMIT_SLABS = 436,
315 VAR_IP_RATELIMIT_SIZE = 437,
316 VAR_RATELIMIT = 438,
317 VAR_RATELIMIT_SLABS = 439,
318 VAR_RATELIMIT_SIZE = 440,
319 VAR_RATELIMIT_FOR_DOMAIN = 441,
320 VAR_RATELIMIT_BELOW_DOMAIN = 442,
321 VAR_IP_RATELIMIT_FACTOR = 443,
322 VAR_RATELIMIT_FACTOR = 444,
323 VAR_SEND_CLIENT_SUBNET = 445,
324 VAR_CLIENT_SUBNET_ZONE = 446,
325 VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 447,
326 VAR_CLIENT_SUBNET_OPCODE = 448,
327 VAR_MAX_CLIENT_SUBNET_IPV4 = 449,
328 VAR_MAX_CLIENT_SUBNET_IPV6 = 450,
329 VAR_MIN_CLIENT_SUBNET_IPV4 = 451,
330 VAR_MIN_CLIENT_SUBNET_IPV6 = 452,
331 VAR_MAX_ECS_TREE_SIZE_IPV4 = 453,
332 VAR_MAX_ECS_TREE_SIZE_IPV6 = 454,
333 VAR_CAPS_WHITELIST = 455,
334 VAR_CACHE_MAX_NEGATIVE_TTL = 456,
335 VAR_PERMIT_SMALL_HOLDDOWN = 457,
336 VAR_QNAME_MINIMISATION = 458,
337 VAR_QNAME_MINIMISATION_STRICT = 459,
338 VAR_IP_FREEBIND = 460,
339 VAR_DEFINE_TAG = 461,
340 VAR_LOCAL_ZONE_TAG = 462,
341 VAR_ACCESS_CONTROL_TAG = 463,
342 VAR_LOCAL_ZONE_OVERRIDE = 464,
343 VAR_ACCESS_CONTROL_TAG_ACTION = 465,
344 VAR_ACCESS_CONTROL_TAG_DATA = 466,
345 VAR_VIEW = 467,
346 VAR_ACCESS_CONTROL_VIEW = 468,
347 VAR_VIEW_FIRST = 469,
348 VAR_SERVE_EXPIRED = 470,
349 VAR_SERVE_EXPIRED_TTL = 471,
350 VAR_SERVE_EXPIRED_TTL_RESET = 472,
351 VAR_SERVE_EXPIRED_REPLY_TTL = 473,
352 VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 474,
353 VAR_FAKE_DSA = 475,
354 VAR_FAKE_SHA1 = 476,
355 VAR_LOG_IDENTITY = 477,
356 VAR_HIDE_TRUSTANCHOR = 478,
357 VAR_TRUST_ANCHOR_SIGNALING = 479,
358 VAR_AGGRESSIVE_NSEC = 480,
359 VAR_USE_SYSTEMD = 481,
360 VAR_SHM_ENABLE = 482,
361 VAR_SHM_KEY = 483,
362 VAR_ROOT_KEY_SENTINEL = 484,
363 VAR_DNSCRYPT = 485,
364 VAR_DNSCRYPT_ENABLE = 486,
365 VAR_DNSCRYPT_PORT = 487,
366 VAR_DNSCRYPT_PROVIDER = 488,
367 VAR_DNSCRYPT_SECRET_KEY = 489,
368 VAR_DNSCRYPT_PROVIDER_CERT = 490,
369 VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 491,
370 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 492,
371 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 493,
372 VAR_DNSCRYPT_NONCE_CACHE_SIZE = 494,
373 VAR_DNSCRYPT_NONCE_CACHE_SLABS = 495,
374 VAR_IPSECMOD_ENABLED = 496,
375 VAR_IPSECMOD_HOOK = 497,
376 VAR_IPSECMOD_IGNORE_BOGUS = 498,
377 VAR_IPSECMOD_MAX_TTL = 499,
378 VAR_IPSECMOD_WHITELIST = 500,
379 VAR_IPSECMOD_STRICT = 501,
380 VAR_CACHEDB = 502,
381 VAR_CACHEDB_BACKEND = 503,
382 VAR_CACHEDB_SECRETSEED = 504,
383 VAR_CACHEDB_REDISHOST = 505,
384 VAR_CACHEDB_REDISPORT = 506,
385 VAR_CACHEDB_REDISTIMEOUT = 507,
386 VAR_CACHEDB_REDISEXPIRERECORDS = 508,
387 VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 509,
388 VAR_FOR_UPSTREAM = 510,
389 VAR_AUTH_ZONE = 511,
390 VAR_ZONEFILE = 512,
391 VAR_MASTER = 513,
392 VAR_URL = 514,
393 VAR_FOR_DOWNSTREAM = 515,
394 VAR_FALLBACK_ENABLED = 516,
395 VAR_TLS_ADDITIONAL_PORT = 517,
396 VAR_LOW_RTT = 518,
397 VAR_LOW_RTT_PERMIL = 519,
398 VAR_FAST_SERVER_PERMIL = 520,
399 VAR_FAST_SERVER_NUM = 521,
400 VAR_ALLOW_NOTIFY = 522,
401 VAR_TLS_WIN_CERT = 523,
402 VAR_TCP_CONNECTION_LIMIT = 524,
403 VAR_FORWARD_NO_CACHE = 525,
404 VAR_STUB_NO_CACHE = 526,
405 VAR_LOG_SERVFAIL = 527,
406 VAR_DENY_ANY = 528,
407 VAR_UNKNOWN_SERVER_TIME_LIMIT = 529,
408 VAR_LOG_TAG_QUERYREPLY = 530,
409 VAR_STREAM_WAIT_SIZE = 531,
410 VAR_TLS_CIPHERS = 532,
411 VAR_TLS_CIPHERSUITES = 533,
412 VAR_TLS_USE_SNI = 534,
413 VAR_IPSET = 535,
414 VAR_IPSET_NAME_V4 = 536,
415 VAR_IPSET_NAME_V6 = 537,
416 VAR_TLS_SESSION_TICKET_KEYS = 538,
417 VAR_RPZ = 539,
418 VAR_TAGS = 540,
419 VAR_RPZ_ACTION_OVERRIDE = 541,
420 VAR_RPZ_CNAME_OVERRIDE = 542,
421 VAR_RPZ_LOG = 543,
422 VAR_RPZ_LOG_NAME = 544,
423 VAR_DYNLIB = 545,
424 VAR_DYNLIB_FILE = 546
411425 };
412426 #endif
413427 /* Tokens. */
419433 #define ANY 263
420434 #define ZONESTR 264
421435 #define STRING_ARG 265
422 #define VAR_SERVER 266
423 #define VAR_VERBOSITY 267
424 #define VAR_NUM_THREADS 268
425 #define VAR_PORT 269
426 #define VAR_OUTGOING_RANGE 270
427 #define VAR_INTERFACE 271
428 #define VAR_DO_IP4 272
429 #define VAR_DO_IP6 273
430 #define VAR_PREFER_IP6 274
431 #define VAR_DO_UDP 275
432 #define VAR_DO_TCP 276
433 #define VAR_TCP_MSS 277
434 #define VAR_OUTGOING_TCP_MSS 278
435 #define VAR_TCP_IDLE_TIMEOUT 279
436 #define VAR_EDNS_TCP_KEEPALIVE 280
437 #define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 281
438 #define VAR_CHROOT 282
439 #define VAR_USERNAME 283
440 #define VAR_DIRECTORY 284
441 #define VAR_LOGFILE 285
442 #define VAR_PIDFILE 286
443 #define VAR_MSG_CACHE_SIZE 287
444 #define VAR_MSG_CACHE_SLABS 288
445 #define VAR_NUM_QUERIES_PER_THREAD 289
446 #define VAR_RRSET_CACHE_SIZE 290
447 #define VAR_RRSET_CACHE_SLABS 291
448 #define VAR_OUTGOING_NUM_TCP 292
449 #define VAR_INFRA_HOST_TTL 293
450 #define VAR_INFRA_LAME_TTL 294
451 #define VAR_INFRA_CACHE_SLABS 295
452 #define VAR_INFRA_CACHE_NUMHOSTS 296
453 #define VAR_INFRA_CACHE_LAME_SIZE 297
454 #define VAR_NAME 298
455 #define VAR_STUB_ZONE 299
456 #define VAR_STUB_HOST 300
457 #define VAR_STUB_ADDR 301
458 #define VAR_TARGET_FETCH_POLICY 302
459 #define VAR_HARDEN_SHORT_BUFSIZE 303
460 #define VAR_HARDEN_LARGE_QUERIES 304
461 #define VAR_FORWARD_ZONE 305
462 #define VAR_FORWARD_HOST 306
463 #define VAR_FORWARD_ADDR 307
464 #define VAR_DO_NOT_QUERY_ADDRESS 308
465 #define VAR_HIDE_IDENTITY 309
466 #define VAR_HIDE_VERSION 310
467 #define VAR_IDENTITY 311
468 #define VAR_VERSION 312
469 #define VAR_HARDEN_GLUE 313
470 #define VAR_MODULE_CONF 314
471 #define VAR_TRUST_ANCHOR_FILE 315
472 #define VAR_TRUST_ANCHOR 316
473 #define VAR_VAL_OVERRIDE_DATE 317
474 #define VAR_BOGUS_TTL 318
475 #define VAR_VAL_CLEAN_ADDITIONAL 319
476 #define VAR_VAL_PERMISSIVE_MODE 320
477 #define VAR_INCOMING_NUM_TCP 321
478 #define VAR_MSG_BUFFER_SIZE 322
479 #define VAR_KEY_CACHE_SIZE 323
480 #define VAR_KEY_CACHE_SLABS 324
481 #define VAR_TRUSTED_KEYS_FILE 325
482 #define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 326
483 #define VAR_USE_SYSLOG 327
484 #define VAR_OUTGOING_INTERFACE 328
485 #define VAR_ROOT_HINTS 329
486 #define VAR_DO_NOT_QUERY_LOCALHOST 330
487 #define VAR_CACHE_MAX_TTL 331
488 #define VAR_HARDEN_DNSSEC_STRIPPED 332
489 #define VAR_ACCESS_CONTROL 333
490 #define VAR_LOCAL_ZONE 334
491 #define VAR_LOCAL_DATA 335
492 #define VAR_INTERFACE_AUTOMATIC 336
493 #define VAR_STATISTICS_INTERVAL 337
494 #define VAR_DO_DAEMONIZE 338
495 #define VAR_USE_CAPS_FOR_ID 339
496 #define VAR_STATISTICS_CUMULATIVE 340
497 #define VAR_OUTGOING_PORT_PERMIT 341
498 #define VAR_OUTGOING_PORT_AVOID 342
499 #define VAR_DLV_ANCHOR_FILE 343
500 #define VAR_DLV_ANCHOR 344
501 #define VAR_NEG_CACHE_SIZE 345
502 #define VAR_HARDEN_REFERRAL_PATH 346
503 #define VAR_PRIVATE_ADDRESS 347
504 #define VAR_PRIVATE_DOMAIN 348
505 #define VAR_REMOTE_CONTROL 349
506 #define VAR_CONTROL_ENABLE 350
507 #define VAR_CONTROL_INTERFACE 351
508 #define VAR_CONTROL_PORT 352
509 #define VAR_SERVER_KEY_FILE 353
510 #define VAR_SERVER_CERT_FILE 354
511 #define VAR_CONTROL_KEY_FILE 355
512 #define VAR_CONTROL_CERT_FILE 356
513 #define VAR_CONTROL_USE_CERT 357
514 #define VAR_EXTENDED_STATISTICS 358
515 #define VAR_LOCAL_DATA_PTR 359
516 #define VAR_JOSTLE_TIMEOUT 360
517 #define VAR_STUB_PRIME 361
518 #define VAR_UNWANTED_REPLY_THRESHOLD 362
519 #define VAR_LOG_TIME_ASCII 363
520 #define VAR_DOMAIN_INSECURE 364
521 #define VAR_PYTHON 365
522 #define VAR_PYTHON_SCRIPT 366
523 #define VAR_VAL_SIG_SKEW_MIN 367
524 #define VAR_VAL_SIG_SKEW_MAX 368
525 #define VAR_CACHE_MIN_TTL 369
526 #define VAR_VAL_LOG_LEVEL 370
527 #define VAR_AUTO_TRUST_ANCHOR_FILE 371
528 #define VAR_KEEP_MISSING 372
529 #define VAR_ADD_HOLDDOWN 373
530 #define VAR_DEL_HOLDDOWN 374
531 #define VAR_SO_RCVBUF 375
532 #define VAR_EDNS_BUFFER_SIZE 376
533 #define VAR_PREFETCH 377
534 #define VAR_PREFETCH_KEY 378
535 #define VAR_SO_SNDBUF 379
536 #define VAR_SO_REUSEPORT 380
537 #define VAR_HARDEN_BELOW_NXDOMAIN 381
538 #define VAR_IGNORE_CD_FLAG 382
539 #define VAR_LOG_QUERIES 383
540 #define VAR_LOG_REPLIES 384
541 #define VAR_LOG_LOCAL_ACTIONS 385
542 #define VAR_TCP_UPSTREAM 386
543 #define VAR_SSL_UPSTREAM 387
544 #define VAR_SSL_SERVICE_KEY 388
545 #define VAR_SSL_SERVICE_PEM 389
546 #define VAR_SSL_PORT 390
547 #define VAR_FORWARD_FIRST 391
548 #define VAR_STUB_SSL_UPSTREAM 392
549 #define VAR_FORWARD_SSL_UPSTREAM 393
550 #define VAR_TLS_CERT_BUNDLE 394
551 #define VAR_STUB_FIRST 395
552 #define VAR_MINIMAL_RESPONSES 396
553 #define VAR_RRSET_ROUNDROBIN 397
554 #define VAR_MAX_UDP_SIZE 398
555 #define VAR_DELAY_CLOSE 399
556 #define VAR_UNBLOCK_LAN_ZONES 400
557 #define VAR_INSECURE_LAN_ZONES 401
558 #define VAR_INFRA_CACHE_MIN_RTT 402
559 #define VAR_DNS64_PREFIX 403
560 #define VAR_DNS64_SYNTHALL 404
561 #define VAR_DNS64_IGNORE_AAAA 405
562 #define VAR_DNSTAP 406
563 #define VAR_DNSTAP_ENABLE 407
564 #define VAR_DNSTAP_SOCKET_PATH 408
565 #define VAR_DNSTAP_SEND_IDENTITY 409
566 #define VAR_DNSTAP_SEND_VERSION 410
567 #define VAR_DNSTAP_IDENTITY 411
568 #define VAR_DNSTAP_VERSION 412
569 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 413
570 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 414
571 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 415
572 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 416
573 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 417
574 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 418
575 #define VAR_RESPONSE_IP_TAG 419
576 #define VAR_RESPONSE_IP 420
577 #define VAR_RESPONSE_IP_DATA 421
578 #define VAR_HARDEN_ALGO_DOWNGRADE 422
579 #define VAR_IP_TRANSPARENT 423
580 #define VAR_DISABLE_DNSSEC_LAME_CHECK 424
581 #define VAR_IP_RATELIMIT 425
582 #define VAR_IP_RATELIMIT_SLABS 426
583 #define VAR_IP_RATELIMIT_SIZE 427
584 #define VAR_RATELIMIT 428
585 #define VAR_RATELIMIT_SLABS 429
586 #define VAR_RATELIMIT_SIZE 430
587 #define VAR_RATELIMIT_FOR_DOMAIN 431
588 #define VAR_RATELIMIT_BELOW_DOMAIN 432
589 #define VAR_IP_RATELIMIT_FACTOR 433
590 #define VAR_RATELIMIT_FACTOR 434
591 #define VAR_SEND_CLIENT_SUBNET 435
592 #define VAR_CLIENT_SUBNET_ZONE 436
593 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 437
594 #define VAR_CLIENT_SUBNET_OPCODE 438
595 #define VAR_MAX_CLIENT_SUBNET_IPV4 439
596 #define VAR_MAX_CLIENT_SUBNET_IPV6 440
597 #define VAR_MIN_CLIENT_SUBNET_IPV4 441
598 #define VAR_MIN_CLIENT_SUBNET_IPV6 442
599 #define VAR_MAX_ECS_TREE_SIZE_IPV4 443
600 #define VAR_MAX_ECS_TREE_SIZE_IPV6 444
601 #define VAR_CAPS_WHITELIST 445
602 #define VAR_CACHE_MAX_NEGATIVE_TTL 446
603 #define VAR_PERMIT_SMALL_HOLDDOWN 447
604 #define VAR_QNAME_MINIMISATION 448
605 #define VAR_QNAME_MINIMISATION_STRICT 449
606 #define VAR_IP_FREEBIND 450
607 #define VAR_DEFINE_TAG 451
608 #define VAR_LOCAL_ZONE_TAG 452
609 #define VAR_ACCESS_CONTROL_TAG 453
610 #define VAR_LOCAL_ZONE_OVERRIDE 454
611 #define VAR_ACCESS_CONTROL_TAG_ACTION 455
612 #define VAR_ACCESS_CONTROL_TAG_DATA 456
613 #define VAR_VIEW 457
614 #define VAR_ACCESS_CONTROL_VIEW 458
615 #define VAR_VIEW_FIRST 459
616 #define VAR_SERVE_EXPIRED 460
617 #define VAR_SERVE_EXPIRED_TTL 461
618 #define VAR_SERVE_EXPIRED_TTL_RESET 462
619 #define VAR_SERVE_EXPIRED_REPLY_TTL 463
620 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 464
621 #define VAR_FAKE_DSA 465
622 #define VAR_FAKE_SHA1 466
623 #define VAR_LOG_IDENTITY 467
624 #define VAR_HIDE_TRUSTANCHOR 468
625 #define VAR_TRUST_ANCHOR_SIGNALING 469
626 #define VAR_AGGRESSIVE_NSEC 470
627 #define VAR_USE_SYSTEMD 471
628 #define VAR_SHM_ENABLE 472
629 #define VAR_SHM_KEY 473
630 #define VAR_ROOT_KEY_SENTINEL 474
631 #define VAR_DNSCRYPT 475
632 #define VAR_DNSCRYPT_ENABLE 476
633 #define VAR_DNSCRYPT_PORT 477
634 #define VAR_DNSCRYPT_PROVIDER 478
635 #define VAR_DNSCRYPT_SECRET_KEY 479
636 #define VAR_DNSCRYPT_PROVIDER_CERT 480
637 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 481
638 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 482
639 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 483
640 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 484
641 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 485
642 #define VAR_IPSECMOD_ENABLED 486
643 #define VAR_IPSECMOD_HOOK 487
644 #define VAR_IPSECMOD_IGNORE_BOGUS 488
645 #define VAR_IPSECMOD_MAX_TTL 489
646 #define VAR_IPSECMOD_WHITELIST 490
647 #define VAR_IPSECMOD_STRICT 491
648 #define VAR_CACHEDB 492
649 #define VAR_CACHEDB_BACKEND 493
650 #define VAR_CACHEDB_SECRETSEED 494
651 #define VAR_CACHEDB_REDISHOST 495
652 #define VAR_CACHEDB_REDISPORT 496
653 #define VAR_CACHEDB_REDISTIMEOUT 497
654 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 498
655 #define VAR_FOR_UPSTREAM 499
656 #define VAR_AUTH_ZONE 500
657 #define VAR_ZONEFILE 501
658 #define VAR_MASTER 502
659 #define VAR_URL 503
660 #define VAR_FOR_DOWNSTREAM 504
661 #define VAR_FALLBACK_ENABLED 505
662 #define VAR_TLS_ADDITIONAL_PORT 506
663 #define VAR_LOW_RTT 507
664 #define VAR_LOW_RTT_PERMIL 508
665 #define VAR_FAST_SERVER_PERMIL 509
666 #define VAR_FAST_SERVER_NUM 510
667 #define VAR_ALLOW_NOTIFY 511
668 #define VAR_TLS_WIN_CERT 512
669 #define VAR_TCP_CONNECTION_LIMIT 513
670 #define VAR_FORWARD_NO_CACHE 514
671 #define VAR_STUB_NO_CACHE 515
672 #define VAR_LOG_SERVFAIL 516
673 #define VAR_DENY_ANY 517
674 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 518
675 #define VAR_LOG_TAG_QUERYREPLY 519
676 #define VAR_STREAM_WAIT_SIZE 520
677 #define VAR_TLS_CIPHERS 521
678 #define VAR_TLS_CIPHERSUITES 522
679 #define VAR_IPSET 523
680 #define VAR_IPSET_NAME_V4 524
681 #define VAR_IPSET_NAME_V6 525
682 #define VAR_TLS_SESSION_TICKET_KEYS 526
683 #define VAR_RPZ 527
684 #define VAR_TAGS 528
685 #define VAR_RPZ_ACTION_OVERRIDE 529
686 #define VAR_RPZ_CNAME_OVERRIDE 530
687 #define VAR_RPZ_LOG 531
688 #define VAR_RPZ_LOG_NAME 532
436 #define VAR_FORCE_TOPLEVEL 266
437 #define VAR_SERVER 267
438 #define VAR_VERBOSITY 268
439 #define VAR_NUM_THREADS 269
440 #define VAR_PORT 270
441 #define VAR_OUTGOING_RANGE 271
442 #define VAR_INTERFACE 272
443 #define VAR_PREFER_IP4 273
444 #define VAR_DO_IP4 274
445 #define VAR_DO_IP6 275
446 #define VAR_PREFER_IP6 276
447 #define VAR_DO_UDP 277
448 #define VAR_DO_TCP 278
449 #define VAR_TCP_MSS 279
450 #define VAR_OUTGOING_TCP_MSS 280
451 #define VAR_TCP_IDLE_TIMEOUT 281
452 #define VAR_EDNS_TCP_KEEPALIVE 282
453 #define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 283
454 #define VAR_CHROOT 284
455 #define VAR_USERNAME 285
456 #define VAR_DIRECTORY 286
457 #define VAR_LOGFILE 287
458 #define VAR_PIDFILE 288
459 #define VAR_MSG_CACHE_SIZE 289
460 #define VAR_MSG_CACHE_SLABS 290
461 #define VAR_NUM_QUERIES_PER_THREAD 291
462 #define VAR_RRSET_CACHE_SIZE 292
463 #define VAR_RRSET_CACHE_SLABS 293
464 #define VAR_OUTGOING_NUM_TCP 294
465 #define VAR_INFRA_HOST_TTL 295
466 #define VAR_INFRA_LAME_TTL 296
467 #define VAR_INFRA_CACHE_SLABS 297
468 #define VAR_INFRA_CACHE_NUMHOSTS 298
469 #define VAR_INFRA_CACHE_LAME_SIZE 299
470 #define VAR_NAME 300
471 #define VAR_STUB_ZONE 301
472 #define VAR_STUB_HOST 302
473 #define VAR_STUB_ADDR 303
474 #define VAR_TARGET_FETCH_POLICY 304
475 #define VAR_HARDEN_SHORT_BUFSIZE 305
476 #define VAR_HARDEN_LARGE_QUERIES 306
477 #define VAR_FORWARD_ZONE 307
478 #define VAR_FORWARD_HOST 308
479 #define VAR_FORWARD_ADDR 309
480 #define VAR_DO_NOT_QUERY_ADDRESS 310
481 #define VAR_HIDE_IDENTITY 311
482 #define VAR_HIDE_VERSION 312
483 #define VAR_IDENTITY 313
484 #define VAR_VERSION 314
485 #define VAR_HARDEN_GLUE 315
486 #define VAR_MODULE_CONF 316
487 #define VAR_TRUST_ANCHOR_FILE 317
488 #define VAR_TRUST_ANCHOR 318
489 #define VAR_VAL_OVERRIDE_DATE 319
490 #define VAR_BOGUS_TTL 320
491 #define VAR_VAL_CLEAN_ADDITIONAL 321
492 #define VAR_VAL_PERMISSIVE_MODE 322
493 #define VAR_INCOMING_NUM_TCP 323
494 #define VAR_MSG_BUFFER_SIZE 324
495 #define VAR_KEY_CACHE_SIZE 325
496 #define VAR_KEY_CACHE_SLABS 326
497 #define VAR_TRUSTED_KEYS_FILE 327
498 #define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 328
499 #define VAR_USE_SYSLOG 329
500 #define VAR_OUTGOING_INTERFACE 330
501 #define VAR_ROOT_HINTS 331
502 #define VAR_DO_NOT_QUERY_LOCALHOST 332
503 #define VAR_CACHE_MAX_TTL 333
504 #define VAR_HARDEN_DNSSEC_STRIPPED 334
505 #define VAR_ACCESS_CONTROL 335
506 #define VAR_LOCAL_ZONE 336
507 #define VAR_LOCAL_DATA 337
508 #define VAR_INTERFACE_AUTOMATIC 338
509 #define VAR_STATISTICS_INTERVAL 339
510 #define VAR_DO_DAEMONIZE 340
511 #define VAR_USE_CAPS_FOR_ID 341
512 #define VAR_STATISTICS_CUMULATIVE 342
513 #define VAR_OUTGOING_PORT_PERMIT 343
514 #define VAR_OUTGOING_PORT_AVOID 344
515 #define VAR_DLV_ANCHOR_FILE 345
516 #define VAR_DLV_ANCHOR 346
517 #define VAR_NEG_CACHE_SIZE 347
518 #define VAR_HARDEN_REFERRAL_PATH 348
519 #define VAR_PRIVATE_ADDRESS 349
520 #define VAR_PRIVATE_DOMAIN 350
521 #define VAR_REMOTE_CONTROL 351
522 #define VAR_CONTROL_ENABLE 352
523 #define VAR_CONTROL_INTERFACE 353
524 #define VAR_CONTROL_PORT 354
525 #define VAR_SERVER_KEY_FILE 355
526 #define VAR_SERVER_CERT_FILE 356
527 #define VAR_CONTROL_KEY_FILE 357
528 #define VAR_CONTROL_CERT_FILE 358
529 #define VAR_CONTROL_USE_CERT 359
530 #define VAR_EXTENDED_STATISTICS 360
531 #define VAR_LOCAL_DATA_PTR 361
532 #define VAR_JOSTLE_TIMEOUT 362
533 #define VAR_STUB_PRIME 363
534 #define VAR_UNWANTED_REPLY_THRESHOLD 364
535 #define VAR_LOG_TIME_ASCII 365
536 #define VAR_DOMAIN_INSECURE 366
537 #define VAR_PYTHON 367
538 #define VAR_PYTHON_SCRIPT 368
539 #define VAR_VAL_SIG_SKEW_MIN 369
540 #define VAR_VAL_SIG_SKEW_MAX 370
541 #define VAR_CACHE_MIN_TTL 371
542 #define VAR_VAL_LOG_LEVEL 372
543 #define VAR_AUTO_TRUST_ANCHOR_FILE 373
544 #define VAR_KEEP_MISSING 374
545 #define VAR_ADD_HOLDDOWN 375
546 #define VAR_DEL_HOLDDOWN 376
547 #define VAR_SO_RCVBUF 377
548 #define VAR_EDNS_BUFFER_SIZE 378
549 #define VAR_PREFETCH 379
550 #define VAR_PREFETCH_KEY 380
551 #define VAR_SO_SNDBUF 381
552 #define VAR_SO_REUSEPORT 382
553 #define VAR_HARDEN_BELOW_NXDOMAIN 383
554 #define VAR_IGNORE_CD_FLAG 384
555 #define VAR_LOG_QUERIES 385
556 #define VAR_LOG_REPLIES 386
557 #define VAR_LOG_LOCAL_ACTIONS 387
558 #define VAR_TCP_UPSTREAM 388
559 #define VAR_SSL_UPSTREAM 389
560 #define VAR_SSL_SERVICE_KEY 390
561 #define VAR_SSL_SERVICE_PEM 391
562 #define VAR_SSL_PORT 392
563 #define VAR_FORWARD_FIRST 393
564 #define VAR_STUB_SSL_UPSTREAM 394
565 #define VAR_FORWARD_SSL_UPSTREAM 395
566 #define VAR_TLS_CERT_BUNDLE 396
567 #define VAR_STUB_FIRST 397
568 #define VAR_MINIMAL_RESPONSES 398
569 #define VAR_RRSET_ROUNDROBIN 399
570 #define VAR_MAX_UDP_SIZE 400
571 #define VAR_DELAY_CLOSE 401
572 #define VAR_UNBLOCK_LAN_ZONES 402
573 #define VAR_INSECURE_LAN_ZONES 403
574 #define VAR_INFRA_CACHE_MIN_RTT 404
575 #define VAR_DNS64_PREFIX 405
576 #define VAR_DNS64_SYNTHALL 406
577 #define VAR_DNS64_IGNORE_AAAA 407
578 #define VAR_DNSTAP 408
579 #define VAR_DNSTAP_ENABLE 409
580 #define VAR_DNSTAP_SOCKET_PATH 410
581 #define VAR_DNSTAP_IP 411
582 #define VAR_DNSTAP_TLS 412
583 #define VAR_DNSTAP_TLS_SERVER_NAME 413
584 #define VAR_DNSTAP_TLS_CERT_BUNDLE 414
585 #define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 415
586 #define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 416
587 #define VAR_DNSTAP_SEND_IDENTITY 417
588 #define VAR_DNSTAP_SEND_VERSION 418
589 #define VAR_DNSTAP_BIDIRECTIONAL 419
590 #define VAR_DNSTAP_IDENTITY 420
591 #define VAR_DNSTAP_VERSION 421
592 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 422
593 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 423
594 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 424
595 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 425
596 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 426
597 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 427
598 #define VAR_RESPONSE_IP_TAG 428
599 #define VAR_RESPONSE_IP 429
600 #define VAR_RESPONSE_IP_DATA 430
601 #define VAR_HARDEN_ALGO_DOWNGRADE 431
602 #define VAR_IP_TRANSPARENT 432
603 #define VAR_IP_DSCP 433
604 #define VAR_DISABLE_DNSSEC_LAME_CHECK 434
605 #define VAR_IP_RATELIMIT 435
606 #define VAR_IP_RATELIMIT_SLABS 436
607 #define VAR_IP_RATELIMIT_SIZE 437
608 #define VAR_RATELIMIT 438
609 #define VAR_RATELIMIT_SLABS 439
610 #define VAR_RATELIMIT_SIZE 440
611 #define VAR_RATELIMIT_FOR_DOMAIN 441
612 #define VAR_RATELIMIT_BELOW_DOMAIN 442
613 #define VAR_IP_RATELIMIT_FACTOR 443
614 #define VAR_RATELIMIT_FACTOR 444
615 #define VAR_SEND_CLIENT_SUBNET 445
616 #define VAR_CLIENT_SUBNET_ZONE 446
617 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 447
618 #define VAR_CLIENT_SUBNET_OPCODE 448
619 #define VAR_MAX_CLIENT_SUBNET_IPV4 449
620 #define VAR_MAX_CLIENT_SUBNET_IPV6 450
621 #define VAR_MIN_CLIENT_SUBNET_IPV4 451
622 #define VAR_MIN_CLIENT_SUBNET_IPV6 452
623 #define VAR_MAX_ECS_TREE_SIZE_IPV4 453
624 #define VAR_MAX_ECS_TREE_SIZE_IPV6 454
625 #define VAR_CAPS_WHITELIST 455
626 #define VAR_CACHE_MAX_NEGATIVE_TTL 456
627 #define VAR_PERMIT_SMALL_HOLDDOWN 457
628 #define VAR_QNAME_MINIMISATION 458
629 #define VAR_QNAME_MINIMISATION_STRICT 459
630 #define VAR_IP_FREEBIND 460
631 #define VAR_DEFINE_TAG 461
632 #define VAR_LOCAL_ZONE_TAG 462
633 #define VAR_ACCESS_CONTROL_TAG 463
634 #define VAR_LOCAL_ZONE_OVERRIDE 464
635 #define VAR_ACCESS_CONTROL_TAG_ACTION 465
636 #define VAR_ACCESS_CONTROL_TAG_DATA 466
637 #define VAR_VIEW 467
638 #define VAR_ACCESS_CONTROL_VIEW 468
639 #define VAR_VIEW_FIRST 469
640 #define VAR_SERVE_EXPIRED 470
641 #define VAR_SERVE_EXPIRED_TTL 471
642 #define VAR_SERVE_EXPIRED_TTL_RESET 472
643 #define VAR_SERVE_EXPIRED_REPLY_TTL 473
644 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 474
645 #define VAR_FAKE_DSA 475
646 #define VAR_FAKE_SHA1 476
647 #define VAR_LOG_IDENTITY 477
648 #define VAR_HIDE_TRUSTANCHOR 478
649 #define VAR_TRUST_ANCHOR_SIGNALING 479
650 #define VAR_AGGRESSIVE_NSEC 480
651 #define VAR_USE_SYSTEMD 481
652 #define VAR_SHM_ENABLE 482
653 #define VAR_SHM_KEY 483
654 #define VAR_ROOT_KEY_SENTINEL 484
655 #define VAR_DNSCRYPT 485
656 #define VAR_DNSCRYPT_ENABLE 486
657 #define VAR_DNSCRYPT_PORT 487
658 #define VAR_DNSCRYPT_PROVIDER 488
659 #define VAR_DNSCRYPT_SECRET_KEY 489
660 #define VAR_DNSCRYPT_PROVIDER_CERT 490
661 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 491
662 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 492
663 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 493
664 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 494
665 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 495
666 #define VAR_IPSECMOD_ENABLED 496
667 #define VAR_IPSECMOD_HOOK 497
668 #define VAR_IPSECMOD_IGNORE_BOGUS 498
669 #define VAR_IPSECMOD_MAX_TTL 499
670 #define VAR_IPSECMOD_WHITELIST 500
671 #define VAR_IPSECMOD_STRICT 501
672 #define VAR_CACHEDB 502
673 #define VAR_CACHEDB_BACKEND 503
674 #define VAR_CACHEDB_SECRETSEED 504
675 #define VAR_CACHEDB_REDISHOST 505
676 #define VAR_CACHEDB_REDISPORT 506
677 #define VAR_CACHEDB_REDISTIMEOUT 507
678 #define VAR_CACHEDB_REDISEXPIRERECORDS 508
679 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 509
680 #define VAR_FOR_UPSTREAM 510
681 #define VAR_AUTH_ZONE 511
682 #define VAR_ZONEFILE 512
683 #define VAR_MASTER 513
684 #define VAR_URL 514
685 #define VAR_FOR_DOWNSTREAM 515
686 #define VAR_FALLBACK_ENABLED 516
687 #define VAR_TLS_ADDITIONAL_PORT 517
688 #define VAR_LOW_RTT 518
689 #define VAR_LOW_RTT_PERMIL 519
690 #define VAR_FAST_SERVER_PERMIL 520
691 #define VAR_FAST_SERVER_NUM 521
692 #define VAR_ALLOW_NOTIFY 522
693 #define VAR_TLS_WIN_CERT 523
694 #define VAR_TCP_CONNECTION_LIMIT 524
695 #define VAR_FORWARD_NO_CACHE 525
696 #define VAR_STUB_NO_CACHE 526
697 #define VAR_LOG_SERVFAIL 527
698 #define VAR_DENY_ANY 528
699 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 529
700 #define VAR_LOG_TAG_QUERYREPLY 530
701 #define VAR_STREAM_WAIT_SIZE 531
702 #define VAR_TLS_CIPHERS 532
703 #define VAR_TLS_CIPHERSUITES 533
704 #define VAR_TLS_USE_SNI 534
705 #define VAR_IPSET 535
706 #define VAR_IPSET_NAME_V4 536
707 #define VAR_IPSET_NAME_V6 537
708 #define VAR_TLS_SESSION_TICKET_KEYS 538
709 #define VAR_RPZ 539
710 #define VAR_TAGS 540
711 #define VAR_RPZ_ACTION_OVERRIDE 541
712 #define VAR_RPZ_CNAME_OVERRIDE 542
713 #define VAR_RPZ_LOG 543
714 #define VAR_RPZ_LOG_NAME 544
715 #define VAR_DYNLIB 545
716 #define VAR_DYNLIB_FILE 546
689717
690718 /* Value type. */
691719 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
695723
696724 char* str;
697725
698 #line 700 "util/configparser.c"
726 #line 728 "util/configparser.c"
699727
700728 };
701729 typedef union YYSTYPE YYSTYPE;
945973 /* YYFINAL -- State number of the termination state. */
946974 #define YYFINAL 2
947975 /* YYLAST -- Last index in YYTABLE. */
948 #define YYLAST 590
976 #define YYLAST 620
949977
950978 /* YYNTOKENS -- Number of terminals. */
951 #define YYNTOKENS 278
979 #define YYNTOKENS 292
952980 /* YYNNTS -- Number of nonterminals. */
953 #define YYNNTS 301
981 #define YYNNTS 317
954982 /* YYNRULES -- Number of rules. */
955 #define YYNRULES 580
983 #define YYNRULES 610
956984 /* YYNSTATES -- Number of states. */
957 #define YYNSTATES 863
985 #define YYNSTATES 905
958986
959987 #define YYUNDEFTOK 2
960 #define YYMAXUTOK 532
988 #define YYMAXUTOK 546
961989
962990 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
963991 as returned by yylex, with out-of-bounds checking. */
10211049 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
10221050 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
10231051 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1024 275, 276, 277
1052 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1053 285, 286, 287, 288, 289, 290, 291
10251054 };
10261055
10271056 #if YYDEBUG
10281057 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
10291058 static const yytype_uint16 yyrline[] =
10301059 {
1031 0, 175, 175, 175, 176, 176, 177, 177, 178, 178,
1032 178, 179, 179, 180, 180, 181, 185, 190, 191, 192,
1033 192, 192, 193, 193, 194, 194, 195, 195, 196, 196,
1034 196, 197, 197, 198, 198, 198, 199, 199, 199, 200,
1035 200, 201, 201, 202, 202, 203, 203, 204, 204, 205,
1036 205, 206, 206, 207, 207, 208, 208, 208, 209, 209,
1037 209, 210, 210, 210, 211, 211, 212, 212, 213, 213,
1038 214, 214, 215, 215, 215, 216, 216, 217, 217, 218,
1039 218, 218, 219, 219, 220, 220, 221, 221, 222, 222,
1040 222, 223, 223, 224, 224, 225, 225, 226, 226, 227,
1041 227, 228, 228, 228, 229, 229, 230, 230, 230, 231,
1042 231, 231, 232, 232, 232, 233, 233, 233, 233, 234,
1043 235, 235, 235, 236, 236, 236, 237, 237, 238, 238,
1044 239, 239, 239, 240, 240, 241, 241, 241, 242, 242,
1045 243, 243, 244, 245, 245, 246, 246, 247, 247, 248,
1046 249, 249, 250, 250, 251, 251, 252, 252, 253, 253,
1047 254, 254, 254, 255, 255, 256, 256, 257, 257, 258,
1048 258, 259, 259, 260, 260, 261, 261, 261, 262, 262,
1049 262, 263, 263, 263, 264, 264, 265, 266, 266, 267,
1050 267, 268, 268, 269, 269, 270, 270, 270, 271, 271,
1051 271, 272, 272, 272, 273, 273, 274, 274, 275, 275,
1052 277, 289, 290, 291, 291, 291, 291, 291, 292, 292,
1053 294, 306, 307, 308, 308, 308, 308, 309, 309, 311,
1054 325, 326, 327, 327, 327, 327, 328, 328, 328, 330,
1055 347, 348, 349, 349, 349, 349, 350, 350, 350, 351,
1056 354, 373, 390, 398, 408, 416, 433, 434, 435, 435,
1057 435, 435, 435, 436, 436, 436, 437, 437, 439, 448,
1058 457, 468, 477, 486, 495, 506, 515, 527, 541, 556,
1059 567, 584, 601, 618, 635, 650, 665, 678, 693, 702,
1060 711, 720, 729, 738, 747, 756, 765, 774, 783, 792,
1061 801, 810, 823, 832, 845, 854, 863, 872, 879, 886,
1062 895, 902, 911, 919, 926, 933, 941, 950, 959, 973,
1063 982, 991, 1000, 1009, 1018, 1027, 1034, 1041, 1067, 1075,
1064 1082, 1089, 1096, 1103, 1111, 1119, 1127, 1134, 1145, 1156,
1065 1163, 1172, 1181, 1190, 1197, 1204, 1212, 1220, 1230, 1240,
1066 1250, 1258, 1271, 1282, 1290, 1303, 1312, 1321, 1330, 1340,
1067 1350, 1358, 1371, 1380, 1388, 1397, 1405, 1418, 1427, 1434,
1068 1444, 1454, 1464, 1474, 1484, 1494, 1504, 1514, 1521, 1528,
1069 1535, 1544, 1553, 1562, 1571, 1578, 1588, 1608, 1615, 1633,
1070 1646, 1659, 1668, 1677, 1686, 1695, 1705, 1715, 1726, 1735,
1071 1744, 1753, 1762, 1771, 1780, 1793, 1806, 1815, 1822, 1831,
1072 1840, 1849, 1858, 1866, 1879, 1887, 1928, 1935, 1950, 1960,
1073 1970, 1977, 1984, 1991, 2000, 2008, 2022, 2043, 2064, 2076,
1074 2088, 2100, 2109, 2130, 2140, 2149, 2157, 2165, 2178, 2191,
1075 2206, 2221, 2230, 2239, 2245, 2254, 2263, 2273, 2283, 2296,
1076 2309, 2321, 2335, 2347, 2361, 2371, 2378, 2385, 2394, 2403,
1077 2413, 2423, 2433, 2440, 2447, 2456, 2465, 2475, 2485, 2492,
1078 2499, 2506, 2514, 2524, 2534, 2544, 2554, 2593, 2603, 2611,
1079 2619, 2634, 2643, 2648, 2649, 2650, 2650, 2650, 2651, 2651,
1080 2651, 2652, 2652, 2654, 2664, 2673, 2680, 2687, 2694, 2701,
1081 2708, 2715, 2720, 2721, 2722, 2722, 2723, 2723, 2724, 2724,
1082 2725, 2726, 2727, 2728, 2729, 2730, 2732, 2741, 2748, 2757,
1083 2766, 2773, 2780, 2790, 2800, 2810, 2820, 2830, 2840, 2845,
1084 2846, 2847, 2849, 2855, 2865, 2872, 2881, 2889, 2894, 2895,
1085 2897, 2897, 2897, 2898, 2898, 2899, 2900, 2901, 2902, 2903,
1086 2905, 2915, 2924, 2931, 2940, 2947, 2956, 2964, 2977, 2985,
1087 2998, 3003, 3004, 3005, 3005, 3006, 3006, 3006, 3008, 3020,
1088 3032, 3044, 3059, 3072, 3083, 3088, 3089, 3090, 3090, 3092,
1089 3107
1060 0, 181, 181, 181, 182, 182, 183, 183, 184, 184,
1061 184, 185, 185, 186, 186, 187, 187, 188, 190, 196,
1062 201, 202, 203, 203, 203, 204, 204, 205, 205, 205,
1063 206, 206, 207, 207, 207, 208, 208, 209, 209, 209,
1064 210, 210, 210, 211, 211, 212, 212, 213, 213, 214,
1065 214, 215, 215, 216, 216, 217, 217, 218, 218, 219,
1066 219, 219, 220, 220, 220, 221, 221, 221, 222, 222,
1067 223, 223, 224, 224, 225, 225, 226, 226, 226, 227,
1068 227, 228, 228, 229, 229, 229, 230, 230, 231, 231,
1069 232, 232, 233, 233, 233, 234, 234, 235, 235, 236,
1070 236, 237, 237, 238, 238, 239, 239, 239, 240, 240,
1071 241, 241, 241, 242, 242, 242, 243, 243, 243, 244,
1072 244, 244, 244, 245, 246, 246, 246, 247, 247, 247,
1073 248, 248, 249, 249, 250, 250, 250, 251, 251, 252,
1074 252, 252, 253, 254, 254, 255, 255, 256, 257, 257,
1075 258, 258, 259, 259, 260, 261, 261, 262, 262, 263,
1076 263, 264, 264, 265, 265, 266, 266, 266, 267, 267,
1077 268, 268, 269, 269, 270, 270, 271, 271, 272, 272,
1078 273, 273, 273, 274, 274, 274, 275, 275, 275, 276,
1079 276, 277, 278, 278, 279, 279, 280, 280, 281, 281,
1080 282, 282, 282, 283, 283, 283, 284, 284, 284, 285,
1081 285, 286, 286, 287, 287, 288, 290, 302, 303, 304,
1082 304, 304, 304, 304, 305, 305, 307, 319, 320, 321,
1083 321, 321, 321, 322, 322, 324, 338, 339, 340, 340,
1084 340, 340, 341, 341, 341, 343, 360, 361, 362, 362,
1085 362, 362, 363, 363, 363, 364, 367, 386, 403, 411,
1086 421, 429, 446, 447, 448, 448, 448, 448, 448, 449,
1087 449, 449, 450, 450, 452, 461, 470, 481, 490, 499,
1088 508, 519, 528, 540, 554, 569, 580, 597, 614, 631,
1089 648, 663, 678, 691, 706, 715, 724, 733, 742, 751,
1090 760, 769, 778, 787, 796, 805, 814, 823, 832, 845,
1091 854, 867, 876, 885, 894, 901, 908, 917, 924, 933,
1092 941, 948, 955, 963, 972, 981, 990, 1004, 1013, 1022,
1093 1031, 1040, 1049, 1058, 1065, 1072, 1098, 1106, 1113, 1120,
1094 1127, 1134, 1142, 1150, 1158, 1165, 1176, 1187, 1194, 1203,
1095 1212, 1221, 1228, 1235, 1243, 1251, 1261, 1271, 1281, 1295,
1096 1303, 1316, 1327, 1335, 1348, 1357, 1366, 1375, 1385, 1395,
1097 1403, 1416, 1425, 1433, 1442, 1450, 1463, 1472, 1479, 1489,
1098 1499, 1509, 1519, 1529, 1539, 1549, 1559, 1566, 1573, 1580,
1099 1589, 1598, 1607, 1616, 1623, 1633, 1653, 1660, 1678, 1691,
1100 1704, 1713, 1722, 1731, 1740, 1750, 1760, 1771, 1780, 1789,
1101 1798, 1807, 1816, 1825, 1838, 1851, 1860, 1867, 1876, 1885,
1102 1894, 1903, 1911, 1924, 1932, 1973, 1980, 1995, 2005, 2015,
1103 2022, 2029, 2036, 2045, 2053, 2067, 2088, 2109, 2121, 2133,
1104 2145, 2154, 2175, 2185, 2194, 2202, 2210, 2223, 2236, 2251,
1105 2266, 2275, 2284, 2290, 2299, 2308, 2318, 2328, 2341, 2354,
1106 2366, 2380, 2392, 2406, 2416, 2423, 2430, 2439, 2448, 2458,
1107 2468, 2478, 2485, 2492, 2501, 2510, 2520, 2530, 2537, 2544,
1108 2551, 2559, 2569, 2579, 2589, 2599, 2638, 2648, 2656, 2664,
1109 2679, 2688, 2693, 2694, 2695, 2695, 2695, 2696, 2696, 2696,
1110 2697, 2697, 2699, 2709, 2718, 2725, 2732, 2739, 2746, 2753,
1111 2760, 2765, 2766, 2767, 2767, 2767, 2768, 2768, 2768, 2769,
1112 2770, 2770, 2771, 2771, 2772, 2772, 2773, 2774, 2775, 2776,
1113 2777, 2778, 2780, 2789, 2799, 2806, 2813, 2822, 2829, 2836,
1114 2843, 2850, 2859, 2868, 2875, 2882, 2892, 2902, 2912, 2922,
1115 2932, 2942, 2947, 2948, 2949, 2951, 2957, 2962, 2963, 2964,
1116 2966, 2972, 2982, 2989, 2998, 3006, 3011, 3012, 3014, 3014,
1117 3014, 3015, 3015, 3016, 3017, 3018, 3019, 3020, 3022, 3032,
1118 3041, 3048, 3057, 3064, 3073, 3081, 3094, 3102, 3115, 3120,
1119 3121, 3122, 3122, 3123, 3123, 3123, 3124, 3126, 3138, 3150,
1120 3162, 3177, 3190, 3203, 3214, 3219, 3220, 3221, 3221, 3223,
1121 3238
10901122 };
10911123 #endif
10921124
10961128 static const char *const yytname[] =
10971129 {
10981130 "$end", "error", "$undefined", "SPACE", "LETTER", "NEWLINE", "COMMENT",
1099 "COLON", "ANY", "ZONESTR", "STRING_ARG", "VAR_SERVER", "VAR_VERBOSITY",
1100 "VAR_NUM_THREADS", "VAR_PORT", "VAR_OUTGOING_RANGE", "VAR_INTERFACE",
1101 "VAR_DO_IP4", "VAR_DO_IP6", "VAR_PREFER_IP6", "VAR_DO_UDP", "VAR_DO_TCP",
1131 "COLON", "ANY", "ZONESTR", "STRING_ARG", "VAR_FORCE_TOPLEVEL",
1132 "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS", "VAR_PORT",
1133 "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4", "VAR_DO_IP4",
1134 "VAR_DO_IP6", "VAR_PREFER_IP6", "VAR_DO_UDP", "VAR_DO_TCP",
11021135 "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS", "VAR_TCP_IDLE_TIMEOUT",
11031136 "VAR_EDNS_TCP_KEEPALIVE", "VAR_EDNS_TCP_KEEPALIVE_TIMEOUT", "VAR_CHROOT",
11041137 "VAR_USERNAME", "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE",
11441177 "VAR_DELAY_CLOSE", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES",
11451178 "VAR_INFRA_CACHE_MIN_RTT", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
11461179 "VAR_DNS64_IGNORE_AAAA", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE",
1147 "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_SEND_IDENTITY",
1148 "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
1180 "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP", "VAR_DNSTAP_TLS",
1181 "VAR_DNSTAP_TLS_SERVER_NAME", "VAR_DNSTAP_TLS_CERT_BUNDLE",
1182 "VAR_DNSTAP_TLS_CLIENT_KEY_FILE", "VAR_DNSTAP_TLS_CLIENT_CERT_FILE",
1183 "VAR_DNSTAP_SEND_IDENTITY", "VAR_DNSTAP_SEND_VERSION",
1184 "VAR_DNSTAP_BIDIRECTIONAL", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
11491185 "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES",
11501186 "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES",
11511187 "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
11531189 "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
11541190 "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_RESPONSE_IP_TAG",
11551191 "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA", "VAR_HARDEN_ALGO_DOWNGRADE",
1156 "VAR_IP_TRANSPARENT", "VAR_DISABLE_DNSSEC_LAME_CHECK",
1192 "VAR_IP_TRANSPARENT", "VAR_IP_DSCP", "VAR_DISABLE_DNSSEC_LAME_CHECK",
11571193 "VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE",
11581194 "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE",
11591195 "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN",
11851221 "VAR_IPSECMOD_MAX_TTL", "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT",
11861222 "VAR_CACHEDB", "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED",
11871223 "VAR_CACHEDB_REDISHOST", "VAR_CACHEDB_REDISPORT",
1188 "VAR_CACHEDB_REDISTIMEOUT", "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM",
1189 "VAR_FOR_UPSTREAM", "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER",
1190 "VAR_URL", "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED",
1191 "VAR_TLS_ADDITIONAL_PORT", "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL",
1192 "VAR_FAST_SERVER_PERMIL", "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY",
1193 "VAR_TLS_WIN_CERT", "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE",
1194 "VAR_STUB_NO_CACHE", "VAR_LOG_SERVFAIL", "VAR_DENY_ANY",
1195 "VAR_UNKNOWN_SERVER_TIME_LIMIT", "VAR_LOG_TAG_QUERYREPLY",
1196 "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS", "VAR_TLS_CIPHERSUITES",
1197 "VAR_IPSET", "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6",
1198 "VAR_TLS_SESSION_TICKET_KEYS", "VAR_RPZ", "VAR_TAGS",
1199 "VAR_RPZ_ACTION_OVERRIDE", "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG",
1200 "VAR_RPZ_LOG_NAME", "$accept", "toplevelvars", "toplevelvar",
1201 "serverstart", "contents_server", "content_server", "stubstart",
1202 "contents_stub", "content_stub", "forwardstart", "contents_forward",
1203 "content_forward", "viewstart", "contents_view", "content_view",
1204 "authstart", "contents_auth", "content_auth", "rpz_tag",
1205 "rpz_action_override", "rpz_cname_override", "rpz_log", "rpz_log_name",
1206 "rpzstart", "contents_rpz", "content_rpz", "server_num_threads",
1207 "server_verbosity", "server_statistics_interval",
1224 "VAR_CACHEDB_REDISTIMEOUT", "VAR_CACHEDB_REDISEXPIRERECORDS",
1225 "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM",
1226 "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL",
1227 "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT",
1228 "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL",
1229 "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT",
1230 "VAR_TCP_CONNECTION_LIMIT", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE",
1231 "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT",
1232 "VAR_LOG_TAG_QUERYREPLY", "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS",
1233 "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET",
1234 "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS",
1235 "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE",
1236 "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME",
1237 "VAR_DYNLIB", "VAR_DYNLIB_FILE", "$accept", "toplevelvars",
1238 "toplevelvar", "force_toplevel", "serverstart", "contents_server",
1239 "content_server", "stubstart", "contents_stub", "content_stub",
1240 "forwardstart", "contents_forward", "content_forward", "viewstart",
1241 "contents_view", "content_view", "authstart", "contents_auth",
1242 "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override",
1243 "rpz_log", "rpz_log_name", "rpzstart", "contents_rpz", "content_rpz",
1244 "server_num_threads", "server_verbosity", "server_statistics_interval",
12081245 "server_statistics_cumulative", "server_extended_statistics",
12091246 "server_shm_enable", "server_shm_key", "server_port",
12101247 "server_send_client_subnet", "server_client_subnet_zone",
12161253 "server_outgoing_port_permit", "server_outgoing_port_avoid",
12171254 "server_outgoing_num_tcp", "server_incoming_num_tcp",
12181255 "server_interface_automatic", "server_do_ip4", "server_do_ip6",
1219 "server_do_udp", "server_do_tcp", "server_prefer_ip6", "server_tcp_mss",
1220 "server_outgoing_tcp_mss", "server_tcp_idle_timeout",
1221 "server_tcp_keepalive", "server_tcp_keepalive_timeout",
1222 "server_tcp_upstream", "server_udp_upstream_without_downstream",
1223 "server_ssl_upstream", "server_ssl_service_key",
1224 "server_ssl_service_pem", "server_ssl_port", "server_tls_cert_bundle",
1225 "server_tls_win_cert", "server_tls_additional_port",
1226 "server_tls_ciphers", "server_tls_ciphersuites",
1227 "server_tls_session_ticket_keys", "server_use_systemd",
1228 "server_do_daemonize", "server_use_syslog", "server_log_time_ascii",
1229 "server_log_queries", "server_log_replies", "server_log_tag_queryreply",
1230 "server_log_servfail", "server_log_local_actions", "server_chroot",
1231 "server_username", "server_directory", "server_logfile",
1232 "server_pidfile", "server_root_hints", "server_dlv_anchor_file",
1233 "server_dlv_anchor", "server_auto_trust_anchor_file",
1234 "server_trust_anchor_file", "server_trusted_keys_file",
1235 "server_trust_anchor", "server_trust_anchor_signaling",
1236 "server_root_key_sentinel", "server_domain_insecure",
1237 "server_hide_identity", "server_hide_version", "server_hide_trustanchor",
1238 "server_identity", "server_version", "server_so_rcvbuf",
1239 "server_so_sndbuf", "server_so_reuseport", "server_ip_transparent",
1240 "server_ip_freebind", "server_stream_wait_size",
1241 "server_edns_buffer_size", "server_msg_buffer_size",
1242 "server_msg_cache_size", "server_msg_cache_slabs",
1243 "server_num_queries_per_thread", "server_jostle_timeout",
1244 "server_delay_close", "server_unblock_lan_zones",
1245 "server_insecure_lan_zones", "server_rrset_cache_size",
1246 "server_rrset_cache_slabs", "server_infra_host_ttl",
1247 "server_infra_lame_ttl", "server_infra_cache_numhosts",
1248 "server_infra_cache_lame_size", "server_infra_cache_slabs",
1249 "server_infra_cache_min_rtt", "server_target_fetch_policy",
1250 "server_harden_short_bufsize", "server_harden_large_queries",
1251 "server_harden_glue", "server_harden_dnssec_stripped",
1252 "server_harden_below_nxdomain", "server_harden_referral_path",
1253 "server_harden_algo_downgrade", "server_use_caps_for_id",
1254 "server_caps_whitelist", "server_private_address",
1255 "server_private_domain", "server_prefetch", "server_prefetch_key",
1256 "server_deny_any", "server_unwanted_reply_threshold",
1257 "server_do_not_query_address", "server_do_not_query_localhost",
1258 "server_access_control", "server_module_conf",
1259 "server_val_override_date", "server_val_sig_skew_min",
1260 "server_val_sig_skew_max", "server_cache_max_ttl",
1261 "server_cache_max_negative_ttl", "server_cache_min_ttl",
1262 "server_bogus_ttl", "server_val_clean_additional",
1263 "server_val_permissive_mode", "server_aggressive_nsec",
1264 "server_ignore_cd_flag", "server_serve_expired",
1265 "server_serve_expired_ttl", "server_serve_expired_ttl_reset",
1266 "server_serve_expired_reply_ttl", "server_serve_expired_client_timeout",
1267 "server_fake_dsa", "server_fake_sha1", "server_val_log_level",
1256 "server_do_udp", "server_do_tcp", "server_prefer_ip4",
1257 "server_prefer_ip6", "server_tcp_mss", "server_outgoing_tcp_mss",
1258 "server_tcp_idle_timeout", "server_tcp_keepalive",
1259 "server_tcp_keepalive_timeout", "server_tcp_upstream",
1260 "server_udp_upstream_without_downstream", "server_ssl_upstream",
1261 "server_ssl_service_key", "server_ssl_service_pem", "server_ssl_port",
1262 "server_tls_cert_bundle", "server_tls_win_cert",
1263 "server_tls_additional_port", "server_tls_ciphers",
1264 "server_tls_ciphersuites", "server_tls_session_ticket_keys",
1265 "server_tls_use_sni", "server_use_systemd", "server_do_daemonize",
1266 "server_use_syslog", "server_log_time_ascii", "server_log_queries",
1267 "server_log_replies", "server_log_tag_queryreply", "server_log_servfail",
1268 "server_log_local_actions", "server_chroot", "server_username",
1269 "server_directory", "server_logfile", "server_pidfile",
1270 "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor",
1271 "server_auto_trust_anchor_file", "server_trust_anchor_file",
1272 "server_trusted_keys_file", "server_trust_anchor",
1273 "server_trust_anchor_signaling", "server_root_key_sentinel",
1274 "server_domain_insecure", "server_hide_identity", "server_hide_version",
1275 "server_hide_trustanchor", "server_identity", "server_version",
1276 "server_so_rcvbuf", "server_so_sndbuf", "server_so_reuseport",
1277 "server_ip_transparent", "server_ip_freebind", "server_ip_dscp",
1278 "server_stream_wait_size", "server_edns_buffer_size",
1279 "server_msg_buffer_size", "server_msg_cache_size",
1280 "server_msg_cache_slabs", "server_num_queries_per_thread",
1281 "server_jostle_timeout", "server_delay_close",
1282 "server_unblock_lan_zones", "server_insecure_lan_zones",
1283 "server_rrset_cache_size", "server_rrset_cache_slabs",
1284 "server_infra_host_ttl", "server_infra_lame_ttl",
1285 "server_infra_cache_numhosts", "server_infra_cache_lame_size",
1286 "server_infra_cache_slabs", "server_infra_cache_min_rtt",
1287 "server_target_fetch_policy", "server_harden_short_bufsize",
1288 "server_harden_large_queries", "server_harden_glue",
1289 "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
1290 "server_harden_referral_path", "server_harden_algo_downgrade",
1291 "server_use_caps_for_id", "server_caps_whitelist",
1292 "server_private_address", "server_private_domain", "server_prefetch",
1293 "server_prefetch_key", "server_deny_any",
1294 "server_unwanted_reply_threshold", "server_do_not_query_address",
1295 "server_do_not_query_localhost", "server_access_control",
1296 "server_module_conf", "server_val_override_date",
1297 "server_val_sig_skew_min", "server_val_sig_skew_max",
1298 "server_cache_max_ttl", "server_cache_max_negative_ttl",
1299 "server_cache_min_ttl", "server_bogus_ttl",
1300 "server_val_clean_additional", "server_val_permissive_mode",
1301 "server_aggressive_nsec", "server_ignore_cd_flag",
1302 "server_serve_expired", "server_serve_expired_ttl",
1303 "server_serve_expired_ttl_reset", "server_serve_expired_reply_ttl",
1304 "server_serve_expired_client_timeout", "server_fake_dsa",
1305 "server_fake_sha1", "server_val_log_level",
12681306 "server_val_nsec3_keysize_iterations", "server_add_holddown",
12691307 "server_del_holddown", "server_keep_missing",
12701308 "server_permit_small_holddown", "server_key_cache_size",
12971335 "rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
12981336 "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
12991337 "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
1300 "dt_dnstap_socket_path", "dt_dnstap_send_identity",
1338 "dt_dnstap_bidirectional", "dt_dnstap_socket_path", "dt_dnstap_ip",
1339 "dt_dnstap_tls", "dt_dnstap_tls_server_name",
1340 "dt_dnstap_tls_cert_bundle", "dt_dnstap_tls_client_key_file",
1341 "dt_dnstap_tls_client_cert_file", "dt_dnstap_send_identity",
13011342 "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version",
13021343 "dt_dnstap_log_resolver_query_messages",
13031344 "dt_dnstap_log_resolver_response_messages",
13051346 "dt_dnstap_log_client_response_messages",
13061347 "dt_dnstap_log_forwarder_query_messages",
13071348 "dt_dnstap_log_forwarder_response_messages", "pythonstart",
1308 "contents_py", "content_py", "py_script",
1309 "server_disable_dnssec_lame_check", "server_log_identity",
1310 "server_response_ip", "server_response_ip_data", "dnscstart",
1311 "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable",
1349 "contents_py", "content_py", "py_script", "dynlibstart", "contents_dl",
1350 "content_dl", "dl_file", "server_disable_dnssec_lame_check",
1351 "server_log_identity", "server_response_ip", "server_response_ip_data",
1352 "dnscstart", "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable",
13121353 "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider",
13131354 "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated",
13141355 "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size",
13161357 "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs",
13171358 "cachedbstart", "contents_cachedb", "content_cachedb",
13181359 "cachedb_backend_name", "cachedb_secret_seed", "redis_server_host",
1319 "redis_server_port", "redis_timeout", "server_tcp_connection_limit",
1320 "ipsetstart", "contents_ipset", "content_ipset", "ipset_name_v4",
1321 "ipset_name_v6", YY_NULLPTR
1360 "redis_server_port", "redis_timeout", "redis_expire_records",
1361 "server_tcp_connection_limit", "ipsetstart", "contents_ipset",
1362 "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR
13221363 };
13231364 #endif
13241365
13541395 495, 496, 497, 498, 499, 500, 501, 502, 503, 504,
13551396 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
13561397 515, 516, 517, 518, 519, 520, 521, 522, 523, 524,
1357 525, 526, 527, 528, 529, 530, 531, 532
1398 525, 526, 527, 528, 529, 530, 531, 532, 533, 534,
1399 535, 536, 537, 538, 539, 540, 541, 542, 543, 544,
1400 545, 546
13581401 };
13591402 # endif
13601403
1361 #define YYPACT_NINF -262
1404 #define YYPACT_NINF -285
13621405
13631406 #define yypact_value_is_default(Yystate) \
1364 (!!((Yystate) == (-262)))
1407 (!!((Yystate) == (-285)))
13651408
13661409 #define YYTABLE_NINF -1
13671410
13721415 STATE-NUM. */
13731416 static const yytype_int16 yypact[] =
13741417 {
1375 -262, 0, -262, -262, -262, -262, -262, -262, -262, -262,
1376 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1377 -262, -262, -262, -262, -262, -262, -262, -262, 261, -41,
1378 -36, -40, -20, -42, -29, -128, -105, -170, -221, -261,
1379 2, 3, 4, 12, 26, 27, 28, 31, 32, 33,
1380 35, 36, 37, 38, 39, 51, 52, 53, 64, 65,
1381 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
1382 76, 77, 78, 79, 80, 81, 82, 83, 85, 87,
1383 88, 91, 93, 94, 95, 96, 97, 98, 99, 101,
1384 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
1385 112, 113, 114, 117, 118, 119, 120, 121, 122, 123,
1386 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
1387 134, 135, 136, 137, 138, 139, 140, 142, 143, 144,
1388 145, 146, 147, 148, 149, 150, 151, 152, 153, 155,
1389 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
1390 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
1391 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
1392 186, 187, 188, 189, 190, 191, 193, 197, 198, 199,
1393 200, 201, 202, 203, 205, 206, 207, 208, 211, 212,
1394 215, 228, 229, 230, 231, 232, 233, 234, 236, 237,
1395 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
1396 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
1397 259, 260, 294, 295, 296, 297, 301, 302, 303, 345,
1398 346, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1399 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1400 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1401 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1402 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1403 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1404 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1405 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1406 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1407 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1408 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1409 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1410 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1411 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1412 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1413 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1414 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1415 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1416 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1417 -262, -262, -262, 347, 348, 349, 350, 351, 352, 353,
1418 -262, -262, -262, -262, -262, -262, -262, -262, 357, 361,
1419 362, 387, 388, 389, -262, -262, -262, -262, -262, -262,
1420 -262, 391, 402, 403, 404, 405, 406, 407, -262, -262,
1421 -262, -262, -262, -262, -262, -262, 408, 409, 410, 411,
1422 412, 413, 414, 453, -262, -262, -262, -262, -262, -262,
1423 -262, -262, -262, 455, 471, 472, 473, 474, -262, -262,
1424 -262, -262, -262, -262, -262, -262, -262, -262, -262, 475,
1425 476, 477, 478, 479, 480, 481, 488, -262, -262, -262,
1426 -262, -262, -262, -262, -262, -262, 489, 490, 491, 492,
1427 493, 495, 496, 497, 498, 499, 500, 501, -262, -262,
1428 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1429 -262, 504, -262, -262, 507, 510, 511, 519, 520, 521,
1430 523, 524, 525, 526, -262, -262, -262, -262, -262, -262,
1431 -262, -262, -262, -262, -262, 527, 528, 529, 530, 531,
1432 -262, -262, -262, -262, -262, -262, 532, 533, -262, -262,
1433 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1434 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1435 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1436 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1437 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1438 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1439 534, 535, -262, -262, -262, -262, -262, -262, -262, -262,
1440 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1441 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1442 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1443 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1444 -262, -262, -262, -262, -262, -262, -262, 536, 537, 538,
1445 -262, -262, -262, -262, -262, -262, -262, -262, -262, 539,
1446 540, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1447 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1448 541, 542, 543, 544, 545, 546, -262, -262, -262, -262,
1449 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1450 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1451 -262, -262, -262, 547, -262, -262, -262, -262, -262, -262,
1452 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1453 -262, -262, -262, -262, -262, -262, 548, -262, -262, 549,
1454 550, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1455 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1456 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1457 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1458 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1459 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1460 -262, -262, 551, 552, 553, -262, -262, -262, -262, -262,
1461 -262, -262, -262
1418 -285, 0, -285, -285, -285, -285, -285, -285, -285, -285,
1419 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1420 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1421 -285, -285, 278, -42, -37, -43, -21, -44, -11, -87,
1422 -109, -284, -206, -230, -272, 3, 4, 5, 25, 26,
1423 27, 30, 31, 32, 33, 34, 35, 37, 38, 39,
1424 40, 41, 43, 44, 45, 46, 47, 48, 49, 50,
1425 51, 52, 54, 55, 84, 85, 88, 89, 92, 94,
1426 95, 96, 97, 98, 99, 100, 101, 103, 104, 105,
1427 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
1428 116, 117, 118, 119, 120, 123, 124, 125, 126, 127,
1429 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
1430 138, 139, 140, 141, 142, 144, 145, 146, 147, 148,
1431 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
1432 159, 160, 162, 163, 164, 165, 166, 167, 168, 169,
1433 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
1434 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
1435 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
1436 200, 201, 206, 207, 208, 209, 210, 211, 212, 214,
1437 215, 216, 217, 218, 221, 222, 225, 238, 239, 240,
1438 241, 242, 243, 244, 245, 247, 248, 249, 250, 251,
1439 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
1440 262, 263, 264, 265, 266, 267, 268, 269, 271, 272,
1441 273, 275, 276, 277, 279, 313, 314, 315, 316, -285,
1442 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1443 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1444 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1445 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1446 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1447 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1448 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1449 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1450 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1451 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1452 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1453 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1454 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1455 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1456 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1457 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1458 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1459 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1460 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1461 -285, -285, -285, -285, 320, 321, 322, 364, 365, 366,
1462 367, -285, -285, -285, -285, -285, -285, -285, -285, 368,
1463 369, 370, 371, 372, 376, -285, -285, -285, -285, -285,
1464 -285, -285, 380, 381, 406, 407, 408, 410, 421, -285,
1465 -285, -285, -285, -285, -285, -285, -285, 422, 423, 424,
1466 425, 426, 427, 428, 429, -285, -285, -285, -285, -285,
1467 -285, -285, -285, -285, 430, 431, 432, 433, 434, -285,
1468 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1469 435, 436, 437, 438, 439, 440, 480, 482, -285, -285,
1470 -285, -285, -285, -285, -285, -285, -285, 498, 499, 500,
1471 501, 502, 503, 504, 505, 506, 507, 508, 515, 516,
1472 517, 518, 519, 520, 521, 523, -285, -285, -285, -285,
1473 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1474 -285, -285, -285, -285, -285, -285, 524, -285, -285, 525,
1475 -285, -285, 526, 527, 528, 529, 532, 535, 538, 539,
1476 548, 549, -285, -285, -285, -285, -285, -285, -285, -285,
1477 -285, -285, -285, 550, 552, 553, 554, 555, 556, -285,
1478 -285, -285, -285, -285, -285, -285, 557, 558, -285, -285,
1479 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1480 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1481 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1482 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1483 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1484 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1485 -285, 559, 560, -285, -285, -285, -285, -285, -285, -285,
1486 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1487 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1488 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1489 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1490 -285, -285, -285, -285, -285, -285, -285, -285, 561, 562,
1491 563, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1492 -285, 564, 565, -285, -285, -285, -285, -285, -285, -285,
1493 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1494 -285, -285, 566, 567, 568, 569, 570, 571, -285, -285,
1495 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1496 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1497 -285, -285, -285, -285, -285, 572, -285, -285, -285, -285,
1498 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1499 -285, -285, -285, -285, -285, -285, -285, -285, -285, 573,
1500 -285, -285, 574, 575, -285, -285, -285, -285, -285, -285,
1501 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1502 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1503 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1504 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1505 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1506 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1507 -285, -285, -285, -285, 576, 577, 578, -285, -285, -285,
1508 -285, -285, -285, -285, -285
14621509 };
14631510
14641511 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
14661513 means the default is an error. */
14671514 static const yytype_uint16 yydefact[] =
14681515 {
1469 2, 0, 1, 16, 210, 220, 482, 528, 501, 229,
1470 537, 560, 239, 574, 255, 3, 18, 212, 222, 231,
1471 241, 257, 484, 503, 530, 539, 562, 576, 4, 5,
1472 6, 10, 14, 15, 8, 9, 7, 11, 12, 13,
1516 2, 0, 1, 18, 19, 216, 226, 491, 551, 510,
1517 235, 565, 588, 245, 604, 261, 556, 3, 17, 21,
1518 218, 228, 237, 247, 263, 493, 512, 553, 558, 567,
1519 590, 606, 4, 5, 6, 10, 14, 15, 8, 9,
1520 7, 16, 11, 12, 13, 0, 0, 0, 0, 0,
14731521 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14741522 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14751523 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14881536 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14891537 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14901538 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1539 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
1540 22, 23, 86, 89, 98, 186, 187, 24, 151, 152,
1541 153, 154, 155, 156, 157, 158, 159, 160, 37, 77,
1542 25, 90, 91, 48, 70, 85, 26, 27, 30, 31,
1543 28, 29, 32, 33, 34, 35, 36, 121, 198, 122,
1544 124, 125, 126, 200, 205, 201, 212, 213, 214, 215,
1545 182, 87, 76, 102, 119, 120, 210, 207, 123, 38,
1546 39, 40, 41, 42, 78, 92, 93, 108, 64, 74,
1547 65, 190, 191, 103, 58, 59, 189, 60, 61, 112,
1548 116, 130, 139, 165, 142, 211, 113, 71, 43, 44,
1549 45, 100, 131, 132, 133, 46, 47, 49, 50, 52,
1550 53, 51, 137, 54, 55, 56, 62, 81, 117, 95,
1551 138, 88, 161, 96, 97, 114, 115, 208, 101, 57,
1552 79, 82, 63, 66, 104, 105, 80, 162, 106, 67,
1553 68, 69, 199, 118, 175, 176, 177, 178, 179, 180,
1554 188, 107, 75, 109, 110, 111, 163, 72, 73, 94,
1555 83, 84, 99, 127, 128, 209, 129, 134, 135, 136,
1556 166, 167, 169, 171, 172, 170, 173, 183, 140, 141,
1557 145, 146, 143, 144, 147, 148, 150, 149, 202, 204,
1558 203, 164, 174, 192, 194, 193, 195, 196, 197, 168,
1559 181, 184, 185, 206, 0, 0, 0, 0, 0, 0,
1560 0, 217, 219, 220, 221, 223, 224, 225, 222, 0,
1561 0, 0, 0, 0, 0, 227, 229, 230, 231, 232,
1562 233, 234, 0, 0, 0, 0, 0, 0, 0, 236,
1563 238, 239, 242, 243, 240, 244, 241, 0, 0, 0,
1564 0, 0, 0, 0, 0, 246, 248, 249, 250, 251,
1565 255, 252, 253, 254, 0, 0, 0, 0, 0, 266,
1566 270, 271, 272, 273, 262, 264, 265, 267, 268, 269,
1567 0, 0, 0, 0, 0, 0, 0, 0, 492, 494,
1568 496, 495, 501, 497, 498, 499, 500, 0, 0, 0,
14911569 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1492 0, 17, 19, 20, 82, 85, 94, 181, 182, 21,
1493 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
1494 33, 73, 22, 86, 87, 44, 66, 81, 23, 24,
1495 26, 27, 25, 28, 29, 30, 31, 32, 117, 193,
1496 118, 120, 121, 122, 195, 200, 196, 207, 208, 209,
1497 177, 83, 72, 98, 115, 116, 205, 202, 119, 34,
1498 35, 36, 37, 38, 74, 88, 89, 104, 60, 70,
1499 61, 185, 186, 99, 54, 55, 184, 56, 57, 108,
1500 112, 126, 135, 160, 206, 109, 67, 39, 40, 41,
1501 96, 127, 128, 129, 42, 43, 45, 46, 48, 49,
1502 47, 133, 50, 51, 52, 58, 77, 113, 91, 134,
1503 84, 156, 92, 93, 110, 111, 203, 97, 53, 75,
1504 78, 59, 62, 100, 101, 76, 157, 102, 63, 64,
1505 65, 194, 114, 170, 171, 172, 173, 174, 175, 183,
1506 103, 71, 105, 106, 107, 158, 68, 69, 90, 79,
1507 80, 95, 123, 124, 204, 125, 130, 131, 132, 161,
1508 162, 164, 166, 167, 165, 168, 178, 136, 137, 140,
1509 141, 138, 139, 142, 143, 145, 144, 197, 199, 198,
1510 159, 169, 187, 189, 188, 190, 191, 192, 163, 176,
1511 179, 180, 201, 0, 0, 0, 0, 0, 0, 0,
1512 211, 213, 214, 215, 217, 218, 219, 216, 0, 0,
1513 0, 0, 0, 0, 221, 223, 224, 225, 226, 227,
1514 228, 0, 0, 0, 0, 0, 0, 0, 230, 232,
1515 233, 236, 237, 234, 238, 235, 0, 0, 0, 0,
1516 0, 0, 0, 0, 240, 242, 243, 244, 245, 249,
1517 246, 247, 248, 0, 0, 0, 0, 0, 260, 264,
1518 265, 266, 267, 256, 258, 259, 261, 262, 263, 0,
1519 0, 0, 0, 0, 0, 0, 0, 483, 485, 487,
1520 486, 492, 488, 489, 490, 491, 0, 0, 0, 0,
1521 0, 0, 0, 0, 0, 0, 0, 0, 502, 504,
1522 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
1523 515, 0, 529, 531, 0, 0, 0, 0, 0, 0,
1524 0, 0, 0, 0, 538, 540, 541, 542, 544, 545,
1525 543, 546, 547, 548, 549, 0, 0, 0, 0, 0,
1526 561, 563, 564, 565, 566, 567, 0, 0, 575, 577,
1527 578, 269, 268, 275, 288, 286, 294, 295, 298, 296,
1528 297, 299, 300, 301, 302, 303, 325, 326, 327, 328,
1529 329, 353, 354, 355, 360, 361, 291, 362, 363, 366,
1530 364, 365, 368, 369, 370, 384, 340, 341, 343, 344,
1531 371, 387, 334, 336, 388, 394, 395, 396, 292, 352,
1532 412, 413, 335, 407, 318, 287, 330, 385, 391, 372,
1533 0, 0, 416, 293, 270, 317, 376, 271, 289, 290,
1534 331, 332, 414, 374, 378, 379, 272, 417, 356, 383,
1535 319, 339, 389, 390, 393, 406, 333, 410, 408, 409,
1536 345, 351, 380, 381, 346, 347, 373, 398, 320, 321,
1537 324, 304, 306, 307, 308, 309, 310, 418, 419, 421,
1538 357, 358, 359, 367, 422, 423, 424, 0, 0, 0,
1539 375, 348, 533, 433, 437, 435, 434, 438, 436, 0,
1540 0, 441, 442, 276, 277, 278, 279, 280, 281, 282,
1541 283, 284, 285, 377, 392, 411, 446, 447, 349, 425,
1542 0, 0, 0, 0, 0, 0, 399, 400, 401, 402,
1543 403, 404, 405, 534, 342, 337, 397, 316, 273, 274,
1544 338, 448, 450, 449, 451, 452, 453, 305, 312, 443,
1545 445, 444, 311, 0, 323, 382, 420, 322, 350, 313,
1546 314, 315, 454, 455, 456, 460, 459, 457, 458, 461,
1547 462, 463, 464, 466, 465, 475, 0, 479, 480, 0,
1548 0, 481, 467, 473, 468, 469, 470, 472, 474, 471,
1549 250, 251, 252, 253, 254, 493, 495, 494, 497, 498,
1550 499, 500, 496, 516, 517, 518, 519, 520, 521, 522,
1551 523, 524, 525, 526, 527, 532, 550, 551, 552, 555,
1552 553, 554, 556, 557, 558, 559, 568, 569, 570, 571,
1553 572, 579, 580, 386, 415, 432, 535, 536, 439, 440,
1554 426, 427, 0, 0, 0, 431, 573, 476, 477, 478,
1555 430, 428, 429
1570 0, 0, 0, 0, 0, 0, 511, 513, 515, 514,
1571 516, 517, 518, 519, 520, 521, 522, 523, 524, 525,
1572 526, 527, 528, 529, 530, 531, 0, 552, 554, 0,
1573 557, 559, 0, 0, 0, 0, 0, 0, 0, 0,
1574 0, 0, 566, 568, 569, 570, 572, 573, 571, 574,
1575 575, 576, 577, 0, 0, 0, 0, 0, 0, 589,
1576 591, 592, 593, 594, 595, 596, 0, 0, 605, 607,
1577 608, 275, 274, 281, 294, 292, 304, 300, 301, 305,
1578 302, 303, 306, 307, 308, 309, 310, 333, 334, 335,
1579 336, 337, 362, 363, 364, 369, 370, 297, 371, 372,
1580 375, 373, 374, 377, 378, 379, 393, 348, 349, 351,
1581 352, 380, 396, 342, 344, 397, 403, 404, 405, 298,
1582 361, 421, 422, 343, 416, 326, 293, 338, 394, 400,
1583 381, 0, 0, 425, 299, 276, 325, 385, 277, 295,
1584 296, 339, 340, 423, 383, 387, 388, 278, 426, 365,
1585 392, 327, 347, 398, 399, 402, 415, 341, 419, 417,
1586 418, 353, 360, 389, 390, 354, 355, 382, 407, 328,
1587 329, 332, 311, 313, 314, 315, 316, 317, 427, 428,
1588 430, 366, 367, 368, 376, 431, 432, 433, 0, 0,
1589 0, 384, 356, 358, 561, 442, 446, 444, 443, 447,
1590 445, 0, 0, 450, 451, 282, 283, 284, 285, 286,
1591 287, 288, 289, 290, 291, 386, 401, 420, 455, 456,
1592 357, 434, 0, 0, 0, 0, 0, 0, 408, 409,
1593 410, 411, 412, 413, 414, 562, 350, 345, 406, 324,
1594 279, 280, 346, 457, 459, 458, 460, 461, 462, 312,
1595 319, 452, 454, 453, 318, 0, 331, 391, 429, 330,
1596 359, 320, 321, 323, 322, 463, 464, 465, 469, 468,
1597 466, 467, 470, 471, 472, 473, 475, 474, 484, 0,
1598 488, 489, 0, 0, 490, 476, 482, 477, 478, 479,
1599 481, 483, 480, 256, 257, 258, 259, 260, 502, 504,
1600 503, 506, 507, 508, 509, 505, 532, 534, 535, 536,
1601 537, 538, 539, 540, 541, 542, 533, 543, 544, 545,
1602 546, 547, 548, 549, 550, 555, 560, 578, 579, 580,
1603 583, 581, 582, 584, 585, 586, 587, 597, 598, 599,
1604 600, 601, 602, 609, 610, 395, 424, 441, 563, 564,
1605 448, 449, 435, 436, 0, 0, 0, 440, 603, 485,
1606 486, 487, 439, 437, 438
15561607 };
15571608
15581609 /* YYPGOTO[NTERM-NUM]. */
15591610 static const yytype_int16 yypgoto[] =
15601611 {
1561 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1562 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1563 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1564 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1565 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1566 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1567 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1568 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1569 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1570 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1571 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1572 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1573 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1574 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1575 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1576 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1577 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1578 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1579 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1580 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1581 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1582 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1583 -262, -262, -262, -262, -262, -23, 554, 555, 556, 557,
1584 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1585 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1586 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1587 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1588 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1589 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1590 -262, -262, -262, -262, -262, -262, -262, -262, -262, -262,
1591 -262
1612 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1613 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1614 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1615 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1616 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1617 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1618 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1619 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1620 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1621 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1622 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1623 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1624 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1625 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1626 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1627 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1628 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1629 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1630 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1631 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1632 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1633 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1634 -285, -285, -285, -285, -285, -285, -285, -285, -285, 579,
1635 580, 581, 582, 583, -285, -285, -285, -285, -285, -285,
1636 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1637 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1638 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1639 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1640 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1641 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1642 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285,
1643 -285, -285, -285, -285, -285, -285, -285
15921644 };
15931645
15941646 /* YYDEFGOTO[NTERM-NUM]. */
15951647 static const yytype_int16 yydefgoto[] =
15961648 {
1597 -1, 1, 15, 16, 28, 231, 17, 29, 430, 18,
1598 30, 444, 19, 31, 458, 20, 32, 474, 488, 489,
1599 490, 491, 492, 21, 33, 493, 232, 233, 234, 235,
1600 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
1601 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
1602 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
1603 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
1604 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
1605 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
1606 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
1607 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
1608 316, 317, 318, 319, 320, 321, 322, 323, 324, 325,
1609 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
1610 336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
1611 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
1612 356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
1613 366, 367, 368, 369, 370, 371, 372, 373, 374, 375,
1614 376, 377, 378, 379, 380, 381, 382, 383, 384, 385,
1615 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
1616 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
1617 406, 407, 408, 409, 410, 411, 412, 413, 414, 415,
1618 416, 417, 431, 432, 433, 434, 435, 436, 437, 445,
1619 446, 447, 448, 449, 450, 475, 476, 477, 478, 479,
1620 480, 481, 482, 459, 460, 461, 462, 463, 464, 465,
1621 22, 34, 507, 508, 509, 510, 511, 512, 513, 514,
1622 515, 23, 35, 528, 529, 530, 531, 532, 533, 534,
1623 535, 536, 537, 538, 539, 540, 24, 36, 542, 543,
1624 418, 419, 420, 421, 25, 37, 554, 555, 556, 557,
1625 558, 559, 560, 561, 562, 563, 564, 26, 38, 570,
1626 571, 572, 573, 574, 575, 422, 27, 39, 578, 579,
1627 580
1649 -1, 1, 17, 18, 19, 32, 239, 20, 33, 441,
1650 21, 34, 455, 22, 35, 469, 23, 36, 485, 499,
1651 500, 501, 502, 503, 24, 37, 504, 240, 241, 242,
1652 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
1653 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
1654 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
1655 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
1656 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
1657 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
1658 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
1659 313, 314, 315, 316, 317, 318, 319, 320, 321, 322,
1660 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
1661 333, 334, 335, 336, 337, 338, 339, 340, 341, 342,
1662 343, 344, 345, 346, 347, 348, 349, 350, 351, 352,
1663 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
1664 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
1665 373, 374, 375, 376, 377, 378, 379, 380, 381, 382,
1666 383, 384, 385, 386, 387, 388, 389, 390, 391, 392,
1667 393, 394, 395, 396, 397, 398, 399, 400, 401, 402,
1668 403, 404, 405, 406, 407, 408, 409, 410, 411, 412,
1669 413, 414, 415, 416, 417, 418, 419, 420, 421, 422,
1670 423, 424, 425, 426, 427, 428, 442, 443, 444, 445,
1671 446, 447, 448, 456, 457, 458, 459, 460, 461, 486,
1672 487, 488, 489, 490, 491, 492, 493, 470, 471, 472,
1673 473, 474, 475, 476, 25, 38, 518, 519, 520, 521,
1674 522, 523, 524, 525, 526, 26, 39, 546, 547, 548,
1675 549, 550, 551, 552, 553, 554, 555, 556, 557, 558,
1676 559, 560, 561, 562, 563, 564, 565, 27, 40, 567,
1677 568, 28, 41, 570, 571, 429, 430, 431, 432, 29,
1678 42, 582, 583, 584, 585, 586, 587, 588, 589, 590,
1679 591, 592, 30, 43, 599, 600, 601, 602, 603, 604,
1680 605, 433, 31, 44, 608, 609, 610
16281681 };
16291682
16301683 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
16321685 number is the opposite. If YYTABLE_NINF, syntax error. */
16331686 static const yytype_uint16 yytable[] =
16341687 {
1635 2, 466, 423, 451, 424, 425, 541, 438, 576, 577,
1636 494, 3, 581, 582, 583, 439, 440, 565, 566, 567,
1637 568, 569, 584, 466, 516, 517, 518, 519, 520, 521,
1638 522, 523, 524, 525, 526, 527, 585, 586, 587, 452,
1639 453, 588, 589, 590, 4, 591, 592, 593, 594, 595,
1640 5, 544, 545, 546, 547, 548, 549, 550, 551, 552,
1641 553, 596, 597, 598, 454, 426, 499, 500, 501, 502,
1642 503, 504, 505, 506, 599, 600, 601, 602, 603, 604,
1643 605, 606, 607, 608, 609, 610, 611, 612, 613, 614,
1644 615, 616, 617, 618, 6, 619, 427, 620, 621, 428,
1645 441, 622, 442, 623, 624, 625, 626, 627, 628, 629,
1646 7, 630, 631, 632, 633, 634, 635, 636, 637, 638,
1647 639, 640, 641, 642, 643, 455, 456, 644, 645, 646,
1648 647, 648, 649, 650, 651, 652, 653, 654, 655, 656,
1649 657, 658, 659, 660, 661, 662, 663, 664, 665, 666,
1650 667, 8, 668, 669, 670, 671, 672, 673, 674, 675,
1651 676, 677, 678, 679, 457, 680, 681, 682, 683, 684,
1652 685, 686, 687, 688, 689, 690, 691, 692, 693, 694,
1653 695, 696, 697, 698, 699, 700, 701, 702, 703, 704,
1654 705, 706, 707, 708, 709, 710, 711, 712, 713, 714,
1655 715, 716, 9, 717, 468, 469, 470, 718, 719, 720,
1656 721, 722, 723, 724, 473, 725, 726, 727, 728, 429,
1657 10, 729, 730, 443, 467, 731, 468, 469, 470, 471,
1658 472, 483, 484, 485, 486, 487, 473, 11, 732, 733,
1659 734, 735, 736, 737, 738, 12, 739, 740, 741, 742,
1660 743, 744, 745, 746, 747, 748, 749, 750, 751, 752,
1661 753, 754, 755, 756, 757, 758, 759, 760, 13, 761,
1662 762, 0, 14, 40, 41, 42, 43, 44, 45, 46,
1663 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
1664 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1665 67, 68, 69, 70, 763, 764, 765, 766, 71, 72,
1666 73, 767, 768, 769, 74, 75, 76, 77, 78, 79,
1667 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
1668 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
1669 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
1670 110, 111, 112, 113, 114, 770, 771, 772, 773, 774,
1671 775, 776, 777, 778, 115, 116, 117, 779, 118, 119,
1672 120, 780, 781, 121, 122, 123, 124, 125, 126, 127,
1673 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
1674 138, 139, 140, 141, 142, 143, 144, 782, 783, 784,
1675 145, 785, 146, 147, 148, 149, 150, 151, 152, 153,
1676 154, 155, 786, 787, 788, 789, 790, 791, 792, 793,
1677 794, 795, 796, 797, 798, 156, 157, 158, 159, 160,
1678 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
1688 2, 477, 462, 434, 566, 435, 436, 569, 449, 606,
1689 607, 3, 4, 611, 612, 613, 450, 451, 593, 594,
1690 595, 596, 597, 598, 477, 572, 573, 574, 575, 576,
1691 577, 578, 579, 580, 581, 614, 615, 616, 463, 464,
1692 617, 618, 619, 620, 621, 622, 5, 623, 624, 625,
1693 626, 627, 6, 628, 629, 630, 631, 632, 633, 634,
1694 635, 636, 637, 465, 638, 639, 437, 527, 528, 529,
1695 530, 531, 532, 533, 534, 535, 536, 537, 538, 539,
1696 540, 541, 542, 543, 544, 545, 510, 511, 512, 513,
1697 514, 515, 516, 517, 640, 641, 7, 438, 642, 643,
1698 439, 452, 644, 453, 645, 646, 647, 648, 649, 650,
1699 651, 652, 8, 653, 654, 655, 656, 657, 658, 659,
1700 660, 661, 662, 663, 664, 665, 666, 667, 668, 669,
1701 670, 466, 467, 671, 672, 673, 674, 675, 676, 677,
1702 678, 679, 680, 681, 682, 683, 684, 685, 686, 687,
1703 688, 689, 690, 9, 691, 692, 693, 694, 695, 696,
1704 697, 698, 699, 700, 701, 702, 703, 704, 705, 706,
1705 707, 468, 708, 709, 710, 711, 712, 713, 714, 715,
1706 716, 717, 718, 719, 720, 721, 722, 723, 724, 725,
1707 726, 727, 728, 729, 730, 731, 732, 733, 734, 735,
1708 736, 737, 738, 739, 740, 741, 742, 743, 744, 745,
1709 746, 747, 10, 479, 480, 481, 748, 749, 750, 751,
1710 752, 753, 754, 484, 755, 756, 757, 758, 759, 440,
1711 11, 760, 761, 454, 478, 762, 479, 480, 481, 482,
1712 483, 494, 495, 496, 497, 498, 484, 12, 763, 764,
1713 765, 766, 767, 768, 769, 770, 13, 771, 772, 773,
1714 774, 775, 776, 777, 778, 779, 780, 781, 782, 783,
1715 784, 785, 786, 787, 788, 789, 790, 791, 792, 793,
1716 14, 794, 795, 796, 15, 797, 798, 799, 0, 800,
1717 16, 45, 46, 47, 48, 49, 50, 51, 52, 53,
1718 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1719 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1720 74, 75, 76, 801, 802, 803, 804, 77, 78, 79,
1721 805, 806, 807, 80, 81, 82, 83, 84, 85, 86,
1722 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
1723 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1724 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
1725 117, 118, 119, 120, 808, 809, 810, 811, 812, 813,
1726 814, 815, 816, 121, 122, 123, 817, 124, 125, 126,
1727 818, 819, 127, 128, 129, 130, 131, 132, 133, 134,
1728 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
1729 145, 146, 147, 148, 149, 150, 820, 821, 822, 151,
1730 823, 152, 153, 154, 155, 156, 157, 158, 159, 160,
1731 161, 824, 825, 826, 827, 828, 829, 830, 831, 832,
1732 833, 834, 835, 836, 837, 838, 839, 840, 841, 842,
1733 843, 162, 163, 164, 165, 166, 167, 168, 169, 170,
16791734 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
16801735 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
1681 191, 192, 193, 799, 194, 800, 195, 196, 197, 198,
1682 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
1683 209, 801, 802, 803, 804, 805, 806, 807, 808, 809,
1684 810, 811, 210, 211, 212, 213, 214, 215, 812, 813,
1685 814, 815, 816, 817, 216, 818, 819, 820, 821, 822,
1686 823, 824, 217, 218, 825, 219, 220, 826, 221, 222,
1687 827, 828, 223, 224, 225, 226, 227, 228, 229, 829,
1688 830, 831, 230, 832, 833, 834, 835, 836, 837, 838,
1689 839, 840, 841, 842, 843, 844, 845, 846, 847, 848,
1690 849, 850, 851, 852, 853, 854, 855, 856, 857, 858,
1691 859, 860, 861, 862, 0, 0, 0, 0, 0, 0,
1736 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
1737 844, 201, 845, 202, 203, 204, 205, 206, 207, 208,
1738 209, 210, 211, 212, 213, 214, 215, 216, 846, 847,
1739 848, 849, 850, 851, 852, 853, 854, 855, 856, 217,
1740 218, 219, 220, 221, 222, 857, 858, 859, 860, 861,
1741 862, 863, 223, 864, 865, 866, 867, 868, 869, 870,
1742 224, 225, 871, 226, 227, 872, 228, 229, 873, 874,
1743 230, 231, 232, 233, 234, 235, 236, 237, 875, 876,
1744 877, 238, 878, 879, 880, 881, 882, 883, 884, 885,
1745 886, 887, 888, 889, 890, 891, 892, 893, 894, 895,
1746 896, 897, 898, 899, 900, 901, 902, 903, 904, 0,
16921747 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1693 0, 0, 0, 0, 0, 0, 0, 495, 496, 497,
1694 498
1748 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1749 0, 0, 0, 0, 0, 0, 505, 506, 507, 508,
1750 509
16951751 };
16961752
16971753 static const yytype_int16 yycheck[] =
16981754 {
1699 0, 43, 43, 43, 45, 46, 111, 43, 269, 270,
1700 33, 11, 10, 10, 10, 51, 52, 238, 239, 240,
1701 241, 242, 10, 43, 152, 153, 154, 155, 156, 157,
1702 158, 159, 160, 161, 162, 163, 10, 10, 10, 79,
1703 80, 10, 10, 10, 44, 10, 10, 10, 10, 10,
1704 50, 221, 222, 223, 224, 225, 226, 227, 228, 229,
1705 230, 10, 10, 10, 104, 106, 95, 96, 97, 98,
1706 99, 100, 101, 102, 10, 10, 10, 10, 10, 10,
1755 0, 45, 45, 45, 113, 47, 48, 291, 45, 281,
1756 282, 11, 12, 10, 10, 10, 53, 54, 248, 249,
1757 250, 251, 252, 253, 45, 231, 232, 233, 234, 235,
1758 236, 237, 238, 239, 240, 10, 10, 10, 81, 82,
1759 10, 10, 10, 10, 10, 10, 46, 10, 10, 10,
1760 10, 10, 52, 10, 10, 10, 10, 10, 10, 10,
1761 10, 10, 10, 106, 10, 10, 108, 154, 155, 156,
1762 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
1763 167, 168, 169, 170, 171, 172, 97, 98, 99, 100,
1764 101, 102, 103, 104, 10, 10, 96, 139, 10, 10,
1765 142, 138, 10, 140, 10, 10, 10, 10, 10, 10,
1766 10, 10, 112, 10, 10, 10, 10, 10, 10, 10,
17071767 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1708 10, 10, 10, 10, 94, 10, 137, 10, 10, 140,
1709 136, 10, 138, 10, 10, 10, 10, 10, 10, 10,
1710 110, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1711 10, 10, 10, 10, 10, 165, 166, 10, 10, 10,
1768 10, 174, 175, 10, 10, 10, 10, 10, 10, 10,
17121769 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1770 10, 10, 10, 153, 10, 10, 10, 10, 10, 10,
17131771 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1714 10, 151, 10, 10, 10, 10, 10, 10, 10, 10,
1715 10, 10, 10, 10, 204, 10, 10, 10, 10, 10,
1772 10, 214, 10, 10, 10, 10, 10, 10, 10, 10,
17161773 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
17171774 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
17181775 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1719 10, 10, 202, 10, 246, 247, 248, 10, 10, 10,
1720 10, 10, 10, 10, 256, 10, 10, 10, 10, 260,
1721 220, 10, 10, 259, 244, 10, 246, 247, 248, 249,
1722 250, 273, 274, 275, 276, 277, 256, 237, 10, 10,
1723 10, 10, 10, 10, 10, 245, 10, 10, 10, 10,
1724 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1725 10, 10, 10, 10, 10, 10, 10, 10, 268, 10,
1726 10, -1, 272, 12, 13, 14, 15, 16, 17, 18,
1727 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
1728 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
1729 39, 40, 41, 42, 10, 10, 10, 10, 47, 48,
1730 49, 10, 10, 10, 53, 54, 55, 56, 57, 58,
1731 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
1732 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
1733 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
1734 89, 90, 91, 92, 93, 10, 10, 10, 10, 10,
1735 10, 10, 10, 10, 103, 104, 105, 10, 107, 108,
1736 109, 10, 10, 112, 113, 114, 115, 116, 117, 118,
1737 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
1738 129, 130, 131, 132, 133, 134, 135, 10, 10, 10,
1739 139, 10, 141, 142, 143, 144, 145, 146, 147, 148,
1740 149, 150, 10, 10, 10, 10, 10, 10, 10, 10,
1741 10, 10, 10, 10, 10, 164, 165, 166, 167, 168,
1742 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
1743 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
1744 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
1745 199, 200, 201, 10, 203, 10, 205, 206, 207, 208,
1746 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
1747 219, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1748 10, 10, 231, 232, 233, 234, 235, 236, 10, 10,
1749 10, 10, 10, 10, 243, 10, 10, 10, 10, 10,
1750 10, 10, 251, 252, 10, 254, 255, 10, 257, 258,
1751 10, 10, 261, 262, 263, 264, 265, 266, 267, 10,
1752 10, 10, 271, 10, 10, 10, 10, 10, 10, 10,
1776 10, 10, 212, 257, 258, 259, 10, 10, 10, 10,
1777 10, 10, 10, 267, 10, 10, 10, 10, 10, 271,
1778 230, 10, 10, 270, 255, 10, 257, 258, 259, 260,
1779 261, 285, 286, 287, 288, 289, 267, 247, 10, 10,
1780 10, 10, 10, 10, 10, 10, 256, 10, 10, 10,
17531781 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
17541782 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1755 10, 10, 10, 10, -1, -1, -1, -1, -1, -1,
1783 280, 10, 10, 10, 284, 10, 10, 10, -1, 10,
1784 290, 13, 14, 15, 16, 17, 18, 19, 20, 21,
1785 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1786 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
1787 42, 43, 44, 10, 10, 10, 10, 49, 50, 51,
1788 10, 10, 10, 55, 56, 57, 58, 59, 60, 61,
1789 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
1790 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1791 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
1792 92, 93, 94, 95, 10, 10, 10, 10, 10, 10,
1793 10, 10, 10, 105, 106, 107, 10, 109, 110, 111,
1794 10, 10, 114, 115, 116, 117, 118, 119, 120, 121,
1795 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
1796 132, 133, 134, 135, 136, 137, 10, 10, 10, 141,
1797 10, 143, 144, 145, 146, 147, 148, 149, 150, 151,
1798 152, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1799 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1800 10, 173, 174, 175, 176, 177, 178, 179, 180, 181,
1801 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
1802 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
1803 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
1804 10, 213, 10, 215, 216, 217, 218, 219, 220, 221,
1805 222, 223, 224, 225, 226, 227, 228, 229, 10, 10,
1806 10, 10, 10, 10, 10, 10, 10, 10, 10, 241,
1807 242, 243, 244, 245, 246, 10, 10, 10, 10, 10,
1808 10, 10, 254, 10, 10, 10, 10, 10, 10, 10,
1809 262, 263, 10, 265, 266, 10, 268, 269, 10, 10,
1810 272, 273, 274, 275, 276, 277, 278, 279, 10, 10,
1811 10, 283, 10, 10, 10, 10, 10, 10, 10, 10,
1812 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1813 10, 10, 10, 10, 10, 10, 10, 10, 10, -1,
17561814 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1757 -1, -1, -1, -1, -1, -1, -1, 33, 33, 33,
1758 33
1815 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1816 -1, -1, -1, -1, -1, -1, 37, 37, 37, 37,
1817 37
17591818 };
17601819
17611820 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
17621821 symbol of state STATE-NUM. */
17631822 static const yytype_uint16 yystos[] =
17641823 {
1765 0, 279, 0, 11, 44, 50, 94, 110, 151, 202,
1766 220, 237, 245, 268, 272, 280, 281, 284, 287, 290,
1767 293, 301, 518, 529, 544, 552, 565, 574, 282, 285,
1768 288, 291, 294, 302, 519, 530, 545, 553, 566, 575,
1769 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
1770 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1771 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
1772 42, 47, 48, 49, 53, 54, 55, 56, 57, 58,
1773 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
1774 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
1775 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
1776 89, 90, 91, 92, 93, 103, 104, 105, 107, 108,
1777 109, 112, 113, 114, 115, 116, 117, 118, 119, 120,
1778 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
1779 131, 132, 133, 134, 135, 139, 141, 142, 143, 144,
1780 145, 146, 147, 148, 149, 150, 164, 165, 166, 167,
1781 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
1782 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
1783 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
1784 198, 199, 200, 201, 203, 205, 206, 207, 208, 209,
1785 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
1786 231, 232, 233, 234, 235, 236, 243, 251, 252, 254,
1787 255, 257, 258, 261, 262, 263, 264, 265, 266, 267,
1788 271, 283, 304, 305, 306, 307, 308, 309, 310, 311,
1789 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
1790 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
1791 332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
1792 342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
1793 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
1794 362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
1795 372, 373, 374, 375, 376, 377, 378, 379, 380, 381,
1796 382, 383, 384, 385, 386, 387, 388, 389, 390, 391,
1797 392, 393, 394, 395, 396, 397, 398, 399, 400, 401,
1798 402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
1799 412, 413, 414, 415, 416, 417, 418, 419, 420, 421,
1800 422, 423, 424, 425, 426, 427, 428, 429, 430, 431,
1801 432, 433, 434, 435, 436, 437, 438, 439, 440, 441,
1802 442, 443, 444, 445, 446, 447, 448, 449, 450, 451,
1803 452, 453, 454, 455, 456, 457, 458, 459, 460, 461,
1804 462, 463, 464, 465, 466, 467, 468, 469, 470, 471,
1805 472, 473, 474, 475, 476, 477, 478, 479, 480, 481,
1806 482, 483, 484, 485, 486, 487, 488, 489, 548, 549,
1807 550, 551, 573, 43, 45, 46, 106, 137, 140, 260,
1808 286, 490, 491, 492, 493, 494, 495, 496, 43, 51,
1809 52, 136, 138, 259, 289, 497, 498, 499, 500, 501,
1810 502, 43, 79, 80, 104, 165, 166, 204, 292, 511,
1811 512, 513, 514, 515, 516, 517, 43, 244, 246, 247,
1812 248, 249, 250, 256, 295, 503, 504, 505, 506, 507,
1813 508, 509, 510, 273, 274, 275, 276, 277, 296, 297,
1814 298, 299, 300, 303, 503, 504, 505, 506, 507, 95,
1815 96, 97, 98, 99, 100, 101, 102, 520, 521, 522,
1816 523, 524, 525, 526, 527, 528, 152, 153, 154, 155,
1817 156, 157, 158, 159, 160, 161, 162, 163, 531, 532,
1818 533, 534, 535, 536, 537, 538, 539, 540, 541, 542,
1819 543, 111, 546, 547, 221, 222, 223, 224, 225, 226,
1820 227, 228, 229, 230, 554, 555, 556, 557, 558, 559,
1821 560, 561, 562, 563, 564, 238, 239, 240, 241, 242,
1822 567, 568, 569, 570, 571, 572, 269, 270, 576, 577,
1823 578, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1824 0, 293, 0, 11, 12, 46, 52, 96, 112, 153,
1825 212, 230, 247, 256, 280, 284, 290, 294, 295, 296,
1826 299, 302, 305, 308, 316, 536, 547, 569, 573, 581,
1827 594, 604, 297, 300, 303, 306, 309, 317, 537, 548,
1828 570, 574, 582, 595, 605, 13, 14, 15, 16, 17,
1829 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
1830 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
1831 38, 39, 40, 41, 42, 43, 44, 49, 50, 51,
1832 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1833 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1834 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1835 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1836 95, 105, 106, 107, 109, 110, 111, 114, 115, 116,
1837 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
1838 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
1839 137, 141, 143, 144, 145, 146, 147, 148, 149, 150,
1840 151, 152, 173, 174, 175, 176, 177, 178, 179, 180,
1841 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
1842 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
1843 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
1844 211, 213, 215, 216, 217, 218, 219, 220, 221, 222,
1845 223, 224, 225, 226, 227, 228, 229, 241, 242, 243,
1846 244, 245, 246, 254, 262, 263, 265, 266, 268, 269,
1847 272, 273, 274, 275, 276, 277, 278, 279, 283, 298,
1848 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
1849 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
1850 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
1851 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
1852 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
1853 369, 370, 371, 372, 373, 374, 375, 376, 377, 378,
1854 379, 380, 381, 382, 383, 384, 385, 386, 387, 388,
1855 389, 390, 391, 392, 393, 394, 395, 396, 397, 398,
1856 399, 400, 401, 402, 403, 404, 405, 406, 407, 408,
1857 409, 410, 411, 412, 413, 414, 415, 416, 417, 418,
1858 419, 420, 421, 422, 423, 424, 425, 426, 427, 428,
1859 429, 430, 431, 432, 433, 434, 435, 436, 437, 438,
1860 439, 440, 441, 442, 443, 444, 445, 446, 447, 448,
1861 449, 450, 451, 452, 453, 454, 455, 456, 457, 458,
1862 459, 460, 461, 462, 463, 464, 465, 466, 467, 468,
1863 469, 470, 471, 472, 473, 474, 475, 476, 477, 478,
1864 479, 480, 481, 482, 483, 484, 485, 486, 487, 488,
1865 489, 490, 491, 492, 493, 494, 495, 496, 497, 498,
1866 499, 500, 501, 502, 503, 504, 505, 506, 507, 577,
1867 578, 579, 580, 603, 45, 47, 48, 108, 139, 142,
1868 271, 301, 508, 509, 510, 511, 512, 513, 514, 45,
1869 53, 54, 138, 140, 270, 304, 515, 516, 517, 518,
1870 519, 520, 45, 81, 82, 106, 174, 175, 214, 307,
1871 529, 530, 531, 532, 533, 534, 535, 45, 255, 257,
1872 258, 259, 260, 261, 267, 310, 521, 522, 523, 524,
1873 525, 526, 527, 528, 285, 286, 287, 288, 289, 311,
1874 312, 313, 314, 315, 318, 521, 522, 523, 524, 525,
1875 97, 98, 99, 100, 101, 102, 103, 104, 538, 539,
1876 540, 541, 542, 543, 544, 545, 546, 154, 155, 156,
1877 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
1878 167, 168, 169, 170, 171, 172, 549, 550, 551, 552,
1879 553, 554, 555, 556, 557, 558, 559, 560, 561, 562,
1880 563, 564, 565, 566, 567, 568, 113, 571, 572, 291,
1881 575, 576, 231, 232, 233, 234, 235, 236, 237, 238,
1882 239, 240, 583, 584, 585, 586, 587, 588, 589, 590,
1883 591, 592, 593, 248, 249, 250, 251, 252, 253, 596,
1884 597, 598, 599, 600, 601, 602, 281, 282, 606, 607,
1885 608, 10, 10, 10, 10, 10, 10, 10, 10, 10,
18241886 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
18251887 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
18261888 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
18481910 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
18491911 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
18501912 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1851 10, 10, 10
1913 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
1914 10, 10, 10, 10, 10
18521915 };
18531916
18541917 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
18551918 static const yytype_uint16 yyr1[] =
18561919 {
1857 0, 278, 279, 279, 280, 280, 280, 280, 280, 280,
1858 280, 280, 280, 280, 280, 280, 281, 282, 282, 283,
1859 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1860 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1861 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1862 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1863 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1864 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1865 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1866 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1867 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1868 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1869 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1870 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1871 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1872 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1873 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1874 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1875 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1876 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1877 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
1878 284, 285, 285, 286, 286, 286, 286, 286, 286, 286,
1879 287, 288, 288, 289, 289, 289, 289, 289, 289, 290,
1880 291, 291, 292, 292, 292, 292, 292, 292, 292, 293,
1881 294, 294, 295, 295, 295, 295, 295, 295, 295, 295,
1882 296, 297, 298, 299, 300, 301, 302, 302, 303, 303,
1883 303, 303, 303, 303, 303, 303, 303, 303, 304, 305,
1884 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
1885 316, 317, 318, 319, 320, 321, 322, 323, 324, 325,
1886 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
1887 336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
1888 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
1889 356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
1890 366, 367, 368, 369, 370, 371, 372, 373, 374, 375,
1891 376, 377, 378, 379, 380, 381, 382, 383, 384, 385,
1892 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
1893 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
1894 406, 407, 408, 409, 410, 411, 412, 413, 414, 415,
1895 416, 417, 418, 419, 420, 421, 422, 423, 424, 425,
1896 426, 427, 428, 429, 430, 431, 432, 433, 434, 435,
1897 436, 437, 438, 439, 440, 441, 442, 443, 444, 445,
1898 446, 447, 448, 449, 450, 451, 452, 453, 454, 455,
1899 456, 457, 458, 459, 460, 461, 462, 463, 464, 465,
1900 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
1901 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,
1902 486, 487, 488, 489, 490, 491, 492, 493, 494, 495,
1903 496, 497, 498, 499, 500, 501, 502, 503, 504, 505,
1904 506, 507, 508, 509, 510, 511, 512, 513, 514, 515,
1905 516, 517, 518, 519, 519, 520, 520, 520, 520, 520,
1906 520, 520, 520, 521, 522, 523, 524, 525, 526, 527,
1907 528, 529, 530, 530, 531, 531, 531, 531, 531, 531,
1908 531, 531, 531, 531, 531, 531, 532, 533, 534, 535,
1909 536, 537, 538, 539, 540, 541, 542, 543, 544, 545,
1910 545, 546, 547, 548, 549, 550, 551, 552, 553, 553,
1911 554, 554, 554, 554, 554, 554, 554, 554, 554, 554,
1912 555, 556, 557, 558, 559, 560, 561, 562, 563, 564,
1913 565, 566, 566, 567, 567, 567, 567, 567, 568, 569,
1914 570, 571, 572, 573, 574, 575, 575, 576, 576, 577,
1915 578
1920 0, 292, 293, 293, 294, 294, 294, 294, 294, 294,
1921 294, 294, 294, 294, 294, 294, 294, 294, 295, 296,
1922 297, 297, 298, 298, 298, 298, 298, 298, 298, 298,
1923 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1924 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1925 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1926 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1927 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1928 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1929 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1930 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1931 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1932 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1933 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1934 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1935 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1936 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1937 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1938 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1939 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1940 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1941 298, 298, 298, 298, 298, 298, 299, 300, 300, 301,
1942 301, 301, 301, 301, 301, 301, 302, 303, 303, 304,
1943 304, 304, 304, 304, 304, 305, 306, 306, 307, 307,
1944 307, 307, 307, 307, 307, 308, 309, 309, 310, 310,
1945 310, 310, 310, 310, 310, 310, 311, 312, 313, 314,
1946 315, 316, 317, 317, 318, 318, 318, 318, 318, 318,
1947 318, 318, 318, 318, 319, 320, 321, 322, 323, 324,
1948 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1949 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1950 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1951 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
1952 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
1953 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1954 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
1955 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
1956 405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
1957 415, 416, 417, 418, 419, 420, 421, 422, 423, 424,
1958 425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
1959 435, 436, 437, 438, 439, 440, 441, 442, 443, 444,
1960 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
1961 455, 456, 457, 458, 459, 460, 461, 462, 463, 464,
1962 465, 466, 467, 468, 469, 470, 471, 472, 473, 474,
1963 475, 476, 477, 478, 479, 480, 481, 482, 483, 484,
1964 485, 486, 487, 488, 489, 490, 491, 492, 493, 494,
1965 495, 496, 497, 498, 499, 500, 501, 502, 503, 504,
1966 505, 506, 507, 508, 509, 510, 511, 512, 513, 514,
1967 515, 516, 517, 518, 519, 520, 521, 522, 523, 524,
1968 525, 526, 527, 528, 529, 530, 531, 532, 533, 534,
1969 535, 536, 537, 537, 538, 538, 538, 538, 538, 538,
1970 538, 538, 539, 540, 541, 542, 543, 544, 545, 546,
1971 547, 548, 548, 549, 549, 549, 549, 549, 549, 549,
1972 549, 549, 549, 549, 549, 549, 549, 549, 549, 549,
1973 549, 549, 550, 551, 552, 553, 554, 555, 556, 557,
1974 558, 559, 560, 561, 562, 563, 564, 565, 566, 567,
1975 568, 569, 570, 570, 571, 572, 573, 574, 574, 575,
1976 576, 577, 578, 579, 580, 581, 582, 582, 583, 583,
1977 583, 583, 583, 583, 583, 583, 583, 583, 584, 585,
1978 586, 587, 588, 589, 590, 591, 592, 593, 594, 595,
1979 595, 596, 596, 596, 596, 596, 596, 597, 598, 599,
1980 600, 601, 602, 603, 604, 605, 605, 606, 606, 607,
1981 608
19161982 };
19171983
19181984 /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
19191985 static const yytype_uint8 yyr2[] =
19201986 {
19211987 0, 2, 0, 2, 2, 2, 2, 2, 2, 2,
1922 2, 2, 2, 2, 2, 2, 1, 2, 0, 1,
1988 2, 2, 2, 2, 2, 2, 2, 1, 1, 1,
1989 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
19231990 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
19241991 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
19251992 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
19382005 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
19392006 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
19402007 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1941 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1942 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
1943 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
1944 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1945 2, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1946 2, 2, 2, 2, 2, 1, 2, 0, 1, 1,
1947 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
2008 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
2009 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
2010 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
2011 1, 1, 1, 1, 1, 1, 2, 0, 1, 1,
2012 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
2013 2, 1, 2, 0, 1, 1, 1, 1, 1, 1,
2014 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
19482015 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
19492016 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
19502017 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
19562023 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
19572024 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
19582025 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1959 2, 2, 2, 2, 2, 2, 3, 2, 2, 2,
2026 2, 2, 2, 2, 2, 3, 2, 2, 2, 2,
19602027 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
19612028 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1962 2, 2, 2, 2, 2, 3, 2, 2, 2, 2,
1963 2, 2, 2, 2, 2, 2, 3, 3, 4, 4,
1964 4, 3, 3, 2, 2, 2, 2, 2, 2, 3,
1965 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2029 2, 2, 2, 2, 3, 2, 2, 2, 2, 2,
2030 2, 2, 2, 2, 2, 3, 3, 4, 4, 4,
2031 3, 3, 2, 2, 2, 2, 2, 2, 3, 3,
19662032 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
19672033 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1968 2, 2, 2, 2, 2, 2, 3, 3, 3, 2,
1969 2, 2, 1, 2, 0, 1, 1, 1, 1, 1,
1970 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2034 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2035 2, 2, 2, 2, 2, 3, 3, 3, 2, 2,
19712036 2, 1, 2, 0, 1, 1, 1, 1, 1, 1,
1972 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
2037 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
2038 1, 2, 0, 1, 1, 1, 1, 1, 1, 1,
2039 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2040 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
2041 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2042 2, 1, 2, 0, 1, 2, 1, 2, 0, 1,
2043 2, 2, 2, 3, 3, 1, 2, 0, 1, 1,
2044 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
19732045 2, 2, 2, 2, 2, 2, 2, 2, 1, 2,
1974 0, 1, 2, 2, 2, 3, 3, 1, 2, 0,
1975 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1976 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1977 1, 2, 0, 1, 1, 1, 1, 1, 2, 2,
2046 0, 1, 1, 1, 1, 1, 1, 2, 2, 2,
19782047 2, 2, 2, 3, 1, 2, 0, 1, 1, 2,
19792048 2
19802049 };
26602729 YY_REDUCE_PRINT (yyn);
26612730 switch (yyn)
26622731 {
2663 case 16:
2664 #line 186 "util/configparser.y"
2732 case 18:
2733 #line 191 "util/configparser.y"
2734 {
2735 OUTYY(("\nP(force-toplevel)\n"));
2736 }
2737 #line 2739 "util/configparser.c"
2738 break;
2739
2740 case 19:
2741 #line 197 "util/configparser.y"
26652742 {
2666 OUTYY(("\nP(server:)\n"));
2667 }
2668 #line 2670 "util/configparser.c"
2669 break;
2670
2671 case 210:
2672 #line 278 "util/configparser.y"
2743 OUTYY(("\nP(server:)\n"));
2744 }
2745 #line 2747 "util/configparser.c"
2746 break;
2747
2748 case 216:
2749 #line 291 "util/configparser.y"
26732750 {
26742751 struct config_stub* s;
26752752 OUTYY(("\nP(stub_zone:)\n"));
26802757 } else
26812758 yyerror("out of memory");
26822759 }
2683 #line 2685 "util/configparser.c"
2684 break;
2685
2686 case 220:
2687 #line 295 "util/configparser.y"
2760 #line 2762 "util/configparser.c"
2761 break;
2762
2763 case 226:
2764 #line 308 "util/configparser.y"
26882765 {
26892766 struct config_stub* s;
26902767 OUTYY(("\nP(forward_zone:)\n"));
26952772 } else
26962773 yyerror("out of memory");
26972774 }
2698 #line 2700 "util/configparser.c"
2699 break;
2700
2701 case 229:
2702 #line 312 "util/configparser.y"
2775 #line 2777 "util/configparser.c"
2776 break;
2777
2778 case 235:
2779 #line 325 "util/configparser.y"
27032780 {
27042781 struct config_view* s;
27052782 OUTYY(("\nP(view:)\n"));
27122789 } else
27132790 yyerror("out of memory");
27142791 }
2715 #line 2717 "util/configparser.c"
2716 break;
2717
2718 case 239:
2719 #line 331 "util/configparser.y"
2792 #line 2794 "util/configparser.c"
2793 break;
2794
2795 case 245:
2796 #line 344 "util/configparser.y"
27202797 {
27212798 struct config_auth* s;
27222799 OUTYY(("\nP(auth_zone:)\n"));
27322809 } else
27332810 yyerror("out of memory");
27342811 }
2735 #line 2737 "util/configparser.c"
2736 break;
2737
2738 case 250:
2739 #line 355 "util/configparser.y"
2812 #line 2814 "util/configparser.c"
2813 break;
2814
2815 case 256:
2816 #line 368 "util/configparser.y"
27402817 {
27412818 uint8_t* bitlist;
27422819 size_t len = 0;
27532830
27542831 }
27552832 }
2756 #line 2758 "util/configparser.c"
2757 break;
2758
2759 case 251:
2760 #line 374 "util/configparser.y"
2833 #line 2835 "util/configparser.c"
2834 break;
2835
2836 case 257:
2837 #line 387 "util/configparser.y"
27612838 {
27622839 OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
27632840 if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 &&
27722849 cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
27732850 }
27742851 }
2775 #line 2777 "util/configparser.c"
2776 break;
2777
2778 case 252:
2779 #line 391 "util/configparser.y"
2852 #line 2854 "util/configparser.c"
2853 break;
2854
2855 case 258:
2856 #line 404 "util/configparser.y"
27802857 {
27812858 OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str)));
27822859 free(cfg_parser->cfg->auths->rpz_cname);
27832860 cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str);
27842861 }
2785 #line 2787 "util/configparser.c"
2786 break;
2787
2788 case 253:
2789 #line 399 "util/configparser.y"
2862 #line 2864 "util/configparser.c"
2863 break;
2864
2865 case 259:
2866 #line 412 "util/configparser.y"
27902867 {
27912868 OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
27922869 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
27942871 else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
27952872 free((yyvsp[0].str));
27962873 }
2797 #line 2799 "util/configparser.c"
2798 break;
2799
2800 case 254:
2801 #line 409 "util/configparser.y"
2874 #line 2876 "util/configparser.c"
2875 break;
2876
2877 case 260:
2878 #line 422 "util/configparser.y"
28022879 {
28032880 OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str)));
28042881 free(cfg_parser->cfg->auths->rpz_log_name);
28052882 cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str);
28062883 }
2807 #line 2809 "util/configparser.c"
2808 break;
2809
2810 case 255:
2811 #line 417 "util/configparser.y"
2884 #line 2886 "util/configparser.c"
2885 break;
2886
2887 case 261:
2888 #line 430 "util/configparser.y"
28122889 {
28132890 struct config_auth* s;
28142891 OUTYY(("\nP(rpz:)\n"));
28242901 } else
28252902 yyerror("out of memory");
28262903 }
2827 #line 2829 "util/configparser.c"
2828 break;
2829
2830 case 268:
2831 #line 440 "util/configparser.y"
2904 #line 2906 "util/configparser.c"
2905 break;
2906
2907 case 274:
2908 #line 453 "util/configparser.y"
28322909 {
28332910 OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
28342911 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
28362913 else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
28372914 free((yyvsp[0].str));
28382915 }
2839 #line 2841 "util/configparser.c"
2840 break;
2841
2842 case 269:
2843 #line 449 "util/configparser.y"
2916 #line 2918 "util/configparser.c"
2917 break;
2918
2919 case 275:
2920 #line 462 "util/configparser.y"
28442921 {
28452922 OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
28462923 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
28482925 else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
28492926 free((yyvsp[0].str));
28502927 }
2851 #line 2853 "util/configparser.c"
2852 break;
2853
2854 case 270:
2855 #line 458 "util/configparser.y"
2928 #line 2930 "util/configparser.c"
2929 break;
2930
2931 case 276:
2932 #line 471 "util/configparser.y"
28562933 {
28572934 OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
28582935 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
28622939 else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
28632940 free((yyvsp[0].str));
28642941 }
2865 #line 2867 "util/configparser.c"
2866 break;
2867
2868 case 271:
2869 #line 469 "util/configparser.y"
2942 #line 2944 "util/configparser.c"
2943 break;
2944
2945 case 277:
2946 #line 482 "util/configparser.y"
28702947 {
28712948 OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
28722949 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
28742951 else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
28752952 free((yyvsp[0].str));
28762953 }
2877 #line 2879 "util/configparser.c"
2878 break;
2879
2880 case 272:
2881 #line 478 "util/configparser.y"
2954 #line 2956 "util/configparser.c"
2955 break;
2956
2957 case 278:
2958 #line 491 "util/configparser.y"
28822959 {
28832960 OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
28842961 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
28862963 else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
28872964 free((yyvsp[0].str));
28882965 }
2889 #line 2891 "util/configparser.c"
2890 break;
2891
2892 case 273:
2893 #line 487 "util/configparser.y"
2966 #line 2968 "util/configparser.c"
2967 break;
2968
2969 case 279:
2970 #line 500 "util/configparser.y"
28942971 {
28952972 OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
28962973 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
28982975 else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
28992976 free((yyvsp[0].str));
29002977 }
2901 #line 2903 "util/configparser.c"
2902 break;
2903
2904 case 274:
2905 #line 496 "util/configparser.y"
2978 #line 2980 "util/configparser.c"
2979 break;
2980
2981 case 280:
2982 #line 509 "util/configparser.y"
29062983 {
29072984 OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
29082985 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
29122989 else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
29132990 free((yyvsp[0].str));
29142991 }
2915 #line 2917 "util/configparser.c"
2916 break;
2917
2918 case 275:
2919 #line 507 "util/configparser.y"
2992 #line 2994 "util/configparser.c"
2993 break;
2994
2995 case 281:
2996 #line 520 "util/configparser.y"
29202997 {
29212998 OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
29222999 if(atoi((yyvsp[0].str)) == 0)
29243001 else cfg_parser->cfg->port = atoi((yyvsp[0].str));
29253002 free((yyvsp[0].str));
29263003 }
2927 #line 2929 "util/configparser.c"
2928 break;
2929
2930 case 276:
2931 #line 516 "util/configparser.y"
3004 #line 3006 "util/configparser.c"
3005 break;
3006
3007 case 282:
3008 #line 529 "util/configparser.y"
29323009 {
29333010 #ifdef CLIENT_SUBNET
29343011 OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
29393016 free((yyvsp[0].str));
29403017 #endif
29413018 }
2942 #line 2944 "util/configparser.c"
2943 break;
2944
2945 case 277:
2946 #line 528 "util/configparser.y"
3019 #line 3021 "util/configparser.c"
3020 break;
3021
3022 case 283:
3023 #line 541 "util/configparser.y"
29473024 {
29483025 #ifdef CLIENT_SUBNET
29493026 OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
29553032 free((yyvsp[0].str));
29563033 #endif
29573034 }
2958 #line 2960 "util/configparser.c"
2959 break;
2960
2961 case 278:
2962 #line 542 "util/configparser.y"
3035 #line 3037 "util/configparser.c"
3036 break;
3037
3038 case 284:
3039 #line 555 "util/configparser.y"
29633040 {
29643041 #ifdef CLIENT_SUBNET
29653042 OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
29733050 #endif
29743051 free((yyvsp[0].str));
29753052 }
2976 #line 2978 "util/configparser.c"
2977 break;
2978
2979 case 279:
2980 #line 557 "util/configparser.y"
3053 #line 3055 "util/configparser.c"
3054 break;
3055
3056 case 285:
3057 #line 570 "util/configparser.y"
29813058 {
29823059 #ifdef CLIENT_SUBNET
29833060 OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
29873064 #endif
29883065 free((yyvsp[0].str));
29893066 }
2990 #line 2992 "util/configparser.c"
2991 break;
2992
2993 case 280:
2994 #line 568 "util/configparser.y"
3067 #line 3069 "util/configparser.c"
3068 break;
3069
3070 case 286:
3071 #line 581 "util/configparser.y"
29953072 {
29963073 #ifdef CLIENT_SUBNET
29973074 OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
30073084 #endif
30083085 free((yyvsp[0].str));
30093086 }
3010 #line 3012 "util/configparser.c"
3011 break;
3012
3013 case 281:
3014 #line 585 "util/configparser.y"
3087 #line 3089 "util/configparser.c"
3088 break;
3089
3090 case 287:
3091 #line 598 "util/configparser.y"
30153092 {
30163093 #ifdef CLIENT_SUBNET
30173094 OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
30273104 #endif
30283105 free((yyvsp[0].str));
30293106 }
3030 #line 3032 "util/configparser.c"
3031 break;
3032
3033 case 282:
3034 #line 602 "util/configparser.y"
3107 #line 3109 "util/configparser.c"
3108 break;
3109
3110 case 288:
3111 #line 615 "util/configparser.y"
30353112 {
30363113 #ifdef CLIENT_SUBNET
30373114 OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
30473124 #endif
30483125 free((yyvsp[0].str));
30493126 }
3050 #line 3052 "util/configparser.c"
3051 break;
3052
3053 case 283:
3054 #line 619 "util/configparser.y"
3127 #line 3129 "util/configparser.c"
3128 break;
3129
3130 case 289:
3131 #line 632 "util/configparser.y"
30553132 {
30563133 #ifdef CLIENT_SUBNET
30573134 OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
30673144 #endif
30683145 free((yyvsp[0].str));
30693146 }
3070 #line 3072 "util/configparser.c"
3071 break;
3072
3073 case 284:
3074 #line 636 "util/configparser.y"
3147 #line 3149 "util/configparser.c"
3148 break;
3149
3150 case 290:
3151 #line 649 "util/configparser.y"
30753152 {
30763153 #ifdef CLIENT_SUBNET
30773154 OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
30853162 #endif
30863163 free((yyvsp[0].str));
30873164 }
3088 #line 3090 "util/configparser.c"
3089 break;
3090
3091 case 285:
3092 #line 651 "util/configparser.y"
3165 #line 3167 "util/configparser.c"
3166 break;
3167
3168 case 291:
3169 #line 664 "util/configparser.y"
30933170 {
30943171 #ifdef CLIENT_SUBNET
30953172 OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
31033180 #endif
31043181 free((yyvsp[0].str));
31053182 }
3106 #line 3108 "util/configparser.c"
3107 break;
3108
3109 case 286:
3110 #line 666 "util/configparser.y"
3183 #line 3185 "util/configparser.c"
3184 break;
3185
3186 case 292:
3187 #line 679 "util/configparser.y"
31113188 {
31123189 OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
31133190 if(cfg_parser->cfg->num_ifs == 0)
31193196 else
31203197 cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
31213198 }
3122 #line 3124 "util/configparser.c"
3123 break;
3124
3125 case 287:
3126 #line 679 "util/configparser.y"
3199 #line 3201 "util/configparser.c"
3200 break;
3201
3202 case 293:
3203 #line 692 "util/configparser.y"
31273204 {
31283205 OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
31293206 if(cfg_parser->cfg->num_out_ifs == 0)
31373214 cfg_parser->cfg->out_ifs[
31383215 cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
31393216 }
3140 #line 3142 "util/configparser.c"
3141 break;
3142
3143 case 288:
3144 #line 694 "util/configparser.y"
3217 #line 3219 "util/configparser.c"
3218 break;
3219
3220 case 294:
3221 #line 707 "util/configparser.y"
31453222 {
31463223 OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
31473224 if(atoi((yyvsp[0].str)) == 0)
31493226 else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
31503227 free((yyvsp[0].str));
31513228 }
3152 #line 3154 "util/configparser.c"
3153 break;
3154
3155 case 289:
3156 #line 703 "util/configparser.y"
3229 #line 3231 "util/configparser.c"
3230 break;
3231
3232 case 295:
3233 #line 716 "util/configparser.y"
31573234 {
31583235 OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
31593236 if(!cfg_mark_ports((yyvsp[0].str), 1,
31613238 yyerror("port number or range (\"low-high\") expected");
31623239 free((yyvsp[0].str));
31633240 }
3164 #line 3166 "util/configparser.c"
3165 break;
3166
3167 case 290:
3168 #line 712 "util/configparser.y"
3241 #line 3243 "util/configparser.c"
3242 break;
3243
3244 case 296:
3245 #line 725 "util/configparser.y"
31693246 {
31703247 OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
31713248 if(!cfg_mark_ports((yyvsp[0].str), 0,
31733250 yyerror("port number or range (\"low-high\") expected");
31743251 free((yyvsp[0].str));
31753252 }
3176 #line 3178 "util/configparser.c"
3177 break;
3178
3179 case 291:
3180 #line 721 "util/configparser.y"
3253 #line 3255 "util/configparser.c"
3254 break;
3255
3256 case 297:
3257 #line 734 "util/configparser.y"
31813258 {
31823259 OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
31833260 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
31853262 else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
31863263 free((yyvsp[0].str));
31873264 }
3188 #line 3190 "util/configparser.c"
3189 break;
3190
3191 case 292:
3192 #line 730 "util/configparser.y"
3265 #line 3267 "util/configparser.c"
3266 break;
3267
3268 case 298:
3269 #line 743 "util/configparser.y"
31933270 {
31943271 OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
31953272 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
31973274 else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
31983275 free((yyvsp[0].str));
31993276 }
3200 #line 3202 "util/configparser.c"
3201 break;
3202
3203 case 293:
3204 #line 739 "util/configparser.y"
3277 #line 3279 "util/configparser.c"
3278 break;
3279
3280 case 299:
3281 #line 752 "util/configparser.y"
32053282 {
32063283 OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
32073284 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32093286 else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
32103287 free((yyvsp[0].str));
32113288 }
3212 #line 3214 "util/configparser.c"
3213 break;
3214
3215 case 294:
3216 #line 748 "util/configparser.y"
3289 #line 3291 "util/configparser.c"
3290 break;
3291
3292 case 300:
3293 #line 761 "util/configparser.y"
32173294 {
32183295 OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
32193296 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32213298 else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
32223299 free((yyvsp[0].str));
32233300 }
3224 #line 3226 "util/configparser.c"
3225 break;
3226
3227 case 295:
3228 #line 757 "util/configparser.y"
3301 #line 3303 "util/configparser.c"
3302 break;
3303
3304 case 301:
3305 #line 770 "util/configparser.y"
32293306 {
32303307 OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
32313308 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32333310 else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
32343311 free((yyvsp[0].str));
32353312 }
3236 #line 3238 "util/configparser.c"
3237 break;
3238
3239 case 296:
3240 #line 766 "util/configparser.y"
3313 #line 3315 "util/configparser.c"
3314 break;
3315
3316 case 302:
3317 #line 779 "util/configparser.y"
32413318 {
32423319 OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
32433320 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32453322 else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
32463323 free((yyvsp[0].str));
32473324 }
3248 #line 3250 "util/configparser.c"
3249 break;
3250
3251 case 297:
3252 #line 775 "util/configparser.y"
3325 #line 3327 "util/configparser.c"
3326 break;
3327
3328 case 303:
3329 #line 788 "util/configparser.y"
32533330 {
32543331 OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
32553332 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32573334 else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
32583335 free((yyvsp[0].str));
32593336 }
3260 #line 3262 "util/configparser.c"
3261 break;
3262
3263 case 298:
3264 #line 784 "util/configparser.y"
3337 #line 3339 "util/configparser.c"
3338 break;
3339
3340 case 304:
3341 #line 797 "util/configparser.y"
3342 {
3343 OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str)));
3344 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3345 yyerror("expected yes or no.");
3346 else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
3347 free((yyvsp[0].str));
3348 }
3349 #line 3351 "util/configparser.c"
3350 break;
3351
3352 case 305:
3353 #line 806 "util/configparser.y"
32653354 {
32663355 OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
32673356 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
32693358 else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
32703359 free((yyvsp[0].str));
32713360 }
3272 #line 3274 "util/configparser.c"
3273 break;
3274
3275 case 299:
3276 #line 793 "util/configparser.y"
3361 #line 3363 "util/configparser.c"
3362 break;
3363
3364 case 306:
3365 #line 815 "util/configparser.y"
32773366 {
32783367 OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
32793368 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
32813370 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
32823371 free((yyvsp[0].str));
32833372 }
3284 #line 3286 "util/configparser.c"
3285 break;
3286
3287 case 300:
3288 #line 802 "util/configparser.y"
3373 #line 3375 "util/configparser.c"
3374 break;
3375
3376 case 307:
3377 #line 824 "util/configparser.y"
32893378 {
32903379 OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
32913380 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
32933382 else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
32943383 free((yyvsp[0].str));
32953384 }
3296 #line 3298 "util/configparser.c"
3297 break;
3298
3299 case 301:
3300 #line 811 "util/configparser.y"
3385 #line 3387 "util/configparser.c"
3386 break;
3387
3388 case 308:
3389 #line 833 "util/configparser.y"
33013390 {
33023391 OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
33033392 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
33093398 else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
33103399 free((yyvsp[0].str));
33113400 }
3312 #line 3314 "util/configparser.c"
3313 break;
3314
3315 case 302:
3316 #line 824 "util/configparser.y"
3401 #line 3403 "util/configparser.c"
3402 break;
3403
3404 case 309:
3405 #line 846 "util/configparser.y"
33173406 {
33183407 OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
33193408 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33213410 else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
33223411 free((yyvsp[0].str));
33233412 }
3324 #line 3326 "util/configparser.c"
3325 break;
3326
3327 case 303:
3328 #line 833 "util/configparser.y"
3413 #line 3415 "util/configparser.c"
3414 break;
3415
3416 case 310:
3417 #line 855 "util/configparser.y"
33293418 {
33303419 OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
33313420 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
33373426 else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
33383427 free((yyvsp[0].str));
33393428 }
3340 #line 3342 "util/configparser.c"
3341 break;
3342
3343 case 304:
3344 #line 846 "util/configparser.y"
3429 #line 3431 "util/configparser.c"
3430 break;
3431
3432 case 311:
3433 #line 868 "util/configparser.y"
33453434 {
33463435 OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
33473436 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33493438 else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
33503439 free((yyvsp[0].str));
33513440 }
3352 #line 3354 "util/configparser.c"
3353 break;
3354
3355 case 305:
3356 #line 855 "util/configparser.y"
3441 #line 3443 "util/configparser.c"
3442 break;
3443
3444 case 312:
3445 #line 877 "util/configparser.y"
33573446 {
33583447 OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
33593448 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33613450 else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
33623451 free((yyvsp[0].str));
33633452 }
3364 #line 3366 "util/configparser.c"
3365 break;
3366
3367 case 306:
3368 #line 864 "util/configparser.y"
3453 #line 3455 "util/configparser.c"
3454 break;
3455
3456 case 313:
3457 #line 886 "util/configparser.y"
33693458 {
33703459 OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
33713460 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
33733462 else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
33743463 free((yyvsp[0].str));
33753464 }
3376 #line 3378 "util/configparser.c"
3377 break;
3378
3379 case 307:
3380 #line 873 "util/configparser.y"
3465 #line 3467 "util/configparser.c"
3466 break;
3467
3468 case 314:
3469 #line 895 "util/configparser.y"
33813470 {
33823471 OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
33833472 free(cfg_parser->cfg->ssl_service_key);
33843473 cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
33853474 }
3386 #line 3388 "util/configparser.c"
3387 break;
3388
3389 case 308:
3390 #line 880 "util/configparser.y"
3475 #line 3477 "util/configparser.c"
3476 break;
3477
3478 case 315:
3479 #line 902 "util/configparser.y"
33913480 {
33923481 OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
33933482 free(cfg_parser->cfg->ssl_service_pem);
33943483 cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
33953484 }
3396 #line 3398 "util/configparser.c"
3397 break;
3398
3399 case 309:
3400 #line 887 "util/configparser.y"
3485 #line 3487 "util/configparser.c"
3486 break;
3487
3488 case 316:
3489 #line 909 "util/configparser.y"
34013490 {
34023491 OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
34033492 if(atoi((yyvsp[0].str)) == 0)
34053494 else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
34063495 free((yyvsp[0].str));
34073496 }
3408 #line 3410 "util/configparser.c"
3409 break;
3410
3411 case 310:
3412 #line 896 "util/configparser.y"
3497 #line 3499 "util/configparser.c"
3498 break;
3499
3500 case 317:
3501 #line 918 "util/configparser.y"
34133502 {
34143503 OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
34153504 free(cfg_parser->cfg->tls_cert_bundle);
34163505 cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
34173506 }
3418 #line 3420 "util/configparser.c"
3419 break;
3420
3421 case 311:
3422 #line 903 "util/configparser.y"
3507 #line 3509 "util/configparser.c"
3508 break;
3509
3510 case 318:
3511 #line 925 "util/configparser.y"
34233512 {
34243513 OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
34253514 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
34273516 else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
34283517 free((yyvsp[0].str));
34293518 }
3430 #line 3432 "util/configparser.c"
3431 break;
3432
3433 case 312:
3434 #line 912 "util/configparser.y"
3519 #line 3521 "util/configparser.c"
3520 break;
3521
3522 case 319:
3523 #line 934 "util/configparser.y"
34353524 {
34363525 OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
34373526 if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
34383527 (yyvsp[0].str)))
34393528 yyerror("out of memory");
34403529 }
3441 #line 3443 "util/configparser.c"
3442 break;
3443
3444 case 313:
3445 #line 920 "util/configparser.y"
3530 #line 3532 "util/configparser.c"
3531 break;
3532
3533 case 320:
3534 #line 942 "util/configparser.y"
34463535 {
34473536 OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
34483537 free(cfg_parser->cfg->tls_ciphers);
34493538 cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
34503539 }
3451 #line 3453 "util/configparser.c"
3452 break;
3453
3454 case 314:
3455 #line 927 "util/configparser.y"
3540 #line 3542 "util/configparser.c"
3541 break;
3542
3543 case 321:
3544 #line 949 "util/configparser.y"
34563545 {
34573546 OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
34583547 free(cfg_parser->cfg->tls_ciphersuites);
34593548 cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
34603549 }
3461 #line 3463 "util/configparser.c"
3462 break;
3463
3464 case 315:
3465 #line 934 "util/configparser.y"
3550 #line 3552 "util/configparser.c"
3551 break;
3552
3553 case 322:
3554 #line 956 "util/configparser.y"
34663555 {
34673556 OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
34683557 if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
34693558 (yyvsp[0].str)))
34703559 yyerror("out of memory");
34713560 }
3472 #line 3474 "util/configparser.c"
3473 break;
3474
3475 case 316:
3476 #line 942 "util/configparser.y"
3561 #line 3563 "util/configparser.c"
3562 break;
3563
3564 case 323:
3565 #line 964 "util/configparser.y"
3566 {
3567 OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str)));
3568 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3569 yyerror("expected yes or no.");
3570 else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
3571 free((yyvsp[0].str));
3572 }
3573 #line 3575 "util/configparser.c"
3574 break;
3575
3576 case 324:
3577 #line 973 "util/configparser.y"
34773578 {
34783579 OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
34793580 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
34813582 else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
34823583 free((yyvsp[0].str));
34833584 }
3484 #line 3486 "util/configparser.c"
3485 break;
3486
3487 case 317:
3488 #line 951 "util/configparser.y"
3585 #line 3587 "util/configparser.c"
3586 break;
3587
3588 case 325:
3589 #line 982 "util/configparser.y"
34893590 {
34903591 OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
34913592 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
34933594 else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
34943595 free((yyvsp[0].str));
34953596 }
3496 #line 3498 "util/configparser.c"
3497 break;
3498
3499 case 318:
3500 #line 960 "util/configparser.y"
3597 #line 3599 "util/configparser.c"
3598 break;
3599
3600 case 326:
3601 #line 991 "util/configparser.y"
35013602 {
35023603 OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
35033604 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35103611 #endif
35113612 free((yyvsp[0].str));
35123613 }
3513 #line 3515 "util/configparser.c"
3514 break;
3515
3516 case 319:
3517 #line 974 "util/configparser.y"
3614 #line 3616 "util/configparser.c"
3615 break;
3616
3617 case 327:
3618 #line 1005 "util/configparser.y"
35183619 {
35193620 OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
35203621 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35223623 else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
35233624 free((yyvsp[0].str));
35243625 }
3525 #line 3527 "util/configparser.c"
3526 break;
3527
3528 case 320:
3529 #line 983 "util/configparser.y"
3626 #line 3628 "util/configparser.c"
3627 break;
3628
3629 case 328:
3630 #line 1014 "util/configparser.y"
35303631 {
35313632 OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
35323633 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35343635 else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
35353636 free((yyvsp[0].str));
35363637 }
3537 #line 3539 "util/configparser.c"
3538 break;
3539
3540 case 321:
3541 #line 992 "util/configparser.y"
3638 #line 3640 "util/configparser.c"
3639 break;
3640
3641 case 329:
3642 #line 1023 "util/configparser.y"
35423643 {
35433644 OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
35443645 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35463647 else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
35473648 free((yyvsp[0].str));
35483649 }
3549 #line 3551 "util/configparser.c"
3550 break;
3551
3552 case 322:
3553 #line 1001 "util/configparser.y"
3650 #line 3652 "util/configparser.c"
3651 break;
3652
3653 case 330:
3654 #line 1032 "util/configparser.y"
35543655 {
35553656 OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
35563657 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35583659 else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
35593660 free((yyvsp[0].str));
35603661 }
3561 #line 3563 "util/configparser.c"
3562 break;
3563
3564 case 323:
3565 #line 1010 "util/configparser.y"
3662 #line 3664 "util/configparser.c"
3663 break;
3664
3665 case 331:
3666 #line 1041 "util/configparser.y"
35663667 {
35673668 OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
35683669 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35703671 else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
35713672 free((yyvsp[0].str));
35723673 }
3573 #line 3575 "util/configparser.c"
3574 break;
3575
3576 case 324:
3577 #line 1019 "util/configparser.y"
3674 #line 3676 "util/configparser.c"
3675 break;
3676
3677 case 332:
3678 #line 1050 "util/configparser.y"
35783679 {
35793680 OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
35803681 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
35823683 else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
35833684 free((yyvsp[0].str));
35843685 }
3585 #line 3587 "util/configparser.c"
3586 break;
3587
3588 case 325:
3589 #line 1028 "util/configparser.y"
3686 #line 3688 "util/configparser.c"
3687 break;
3688
3689 case 333:
3690 #line 1059 "util/configparser.y"
35903691 {
35913692 OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
35923693 free(cfg_parser->cfg->chrootdir);
35933694 cfg_parser->cfg->chrootdir = (yyvsp[0].str);
35943695 }
3595 #line 3597 "util/configparser.c"
3596 break;
3597
3598 case 326:
3599 #line 1035 "util/configparser.y"
3696 #line 3698 "util/configparser.c"
3697 break;
3698
3699 case 334:
3700 #line 1066 "util/configparser.y"
36003701 {
36013702 OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
36023703 free(cfg_parser->cfg->username);
36033704 cfg_parser->cfg->username = (yyvsp[0].str);
36043705 }
3605 #line 3607 "util/configparser.c"
3606 break;
3607
3608 case 327:
3609 #line 1042 "util/configparser.y"
3706 #line 3708 "util/configparser.c"
3707 break;
3708
3709 case 335:
3710 #line 1073 "util/configparser.y"
36103711 {
36113712 OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
36123713 free(cfg_parser->cfg->directory);
36313732 }
36323733 }
36333734 }
3634 #line 3636 "util/configparser.c"
3635 break;
3636
3637 case 328:
3638 #line 1068 "util/configparser.y"
3735 #line 3737 "util/configparser.c"
3736 break;
3737
3738 case 336:
3739 #line 1099 "util/configparser.y"
36393740 {
36403741 OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
36413742 free(cfg_parser->cfg->logfile);
36423743 cfg_parser->cfg->logfile = (yyvsp[0].str);
36433744 cfg_parser->cfg->use_syslog = 0;
36443745 }
3645 #line 3647 "util/configparser.c"
3646 break;
3647
3648 case 329:
3649 #line 1076 "util/configparser.y"
3746 #line 3748 "util/configparser.c"
3747 break;
3748
3749 case 337:
3750 #line 1107 "util/configparser.y"
36503751 {
36513752 OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
36523753 free(cfg_parser->cfg->pidfile);
36533754 cfg_parser->cfg->pidfile = (yyvsp[0].str);
36543755 }
3655 #line 3657 "util/configparser.c"
3656 break;
3657
3658 case 330:
3659 #line 1083 "util/configparser.y"
3756 #line 3758 "util/configparser.c"
3757 break;
3758
3759 case 338:
3760 #line 1114 "util/configparser.y"
36603761 {
36613762 OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
36623763 if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
36633764 yyerror("out of memory");
36643765 }
3665 #line 3667 "util/configparser.c"
3666 break;
3667
3668 case 331:
3669 #line 1090 "util/configparser.y"
3766 #line 3768 "util/configparser.c"
3767 break;
3768
3769 case 339:
3770 #line 1121 "util/configparser.y"
36703771 {
36713772 OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
36723773 free(cfg_parser->cfg->dlv_anchor_file);
36733774 cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str);
36743775 }
3675 #line 3677 "util/configparser.c"
3676 break;
3677
3678 case 332:
3679 #line 1097 "util/configparser.y"
3776 #line 3778 "util/configparser.c"
3777 break;
3778
3779 case 340:
3780 #line 1128 "util/configparser.y"
36803781 {
36813782 OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
36823783 if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str)))
36833784 yyerror("out of memory");
36843785 }
3685 #line 3687 "util/configparser.c"
3686 break;
3687
3688 case 333:
3689 #line 1104 "util/configparser.y"
3786 #line 3788 "util/configparser.c"
3787 break;
3788
3789 case 341:
3790 #line 1135 "util/configparser.y"
36903791 {
36913792 OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
36923793 if(!cfg_strlist_insert(&cfg_parser->cfg->
36933794 auto_trust_anchor_file_list, (yyvsp[0].str)))
36943795 yyerror("out of memory");
36953796 }
3696 #line 3698 "util/configparser.c"
3697 break;
3698
3699 case 334:
3700 #line 1112 "util/configparser.y"
3797 #line 3799 "util/configparser.c"
3798 break;
3799
3800 case 342:
3801 #line 1143 "util/configparser.y"
37013802 {
37023803 OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
37033804 if(!cfg_strlist_insert(&cfg_parser->cfg->
37043805 trust_anchor_file_list, (yyvsp[0].str)))
37053806 yyerror("out of memory");
37063807 }
3707 #line 3709 "util/configparser.c"
3708 break;
3709
3710 case 335:
3711 #line 1120 "util/configparser.y"
3808 #line 3810 "util/configparser.c"
3809 break;
3810
3811 case 343:
3812 #line 1151 "util/configparser.y"
37123813 {
37133814 OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
37143815 if(!cfg_strlist_insert(&cfg_parser->cfg->
37153816 trusted_keys_file_list, (yyvsp[0].str)))
37163817 yyerror("out of memory");
37173818 }
3718 #line 3720 "util/configparser.c"
3719 break;
3720
3721 case 336:
3722 #line 1128 "util/configparser.y"
3819 #line 3821 "util/configparser.c"
3820 break;
3821
3822 case 344:
3823 #line 1159 "util/configparser.y"
37233824 {
37243825 OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
37253826 if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
37263827 yyerror("out of memory");
37273828 }
3728 #line 3730 "util/configparser.c"
3729 break;
3730
3731 case 337:
3732 #line 1135 "util/configparser.y"
3829 #line 3831 "util/configparser.c"
3830 break;
3831
3832 case 345:
3833 #line 1166 "util/configparser.y"
37333834 {
37343835 OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
37353836 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37393840 (strcmp((yyvsp[0].str), "yes")==0);
37403841 free((yyvsp[0].str));
37413842 }
3742 #line 3744 "util/configparser.c"
3743 break;
3744
3745 case 338:
3746 #line 1146 "util/configparser.y"
3843 #line 3845 "util/configparser.c"
3844 break;
3845
3846 case 346:
3847 #line 1177 "util/configparser.y"
37473848 {
37483849 OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
37493850 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37533854 (strcmp((yyvsp[0].str), "yes")==0);
37543855 free((yyvsp[0].str));
37553856 }
3756 #line 3758 "util/configparser.c"
3757 break;
3758
3759 case 339:
3760 #line 1157 "util/configparser.y"
3857 #line 3859 "util/configparser.c"
3858 break;
3859
3860 case 347:
3861 #line 1188 "util/configparser.y"
37613862 {
37623863 OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
37633864 if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
37643865 yyerror("out of memory");
37653866 }
3766 #line 3768 "util/configparser.c"
3767 break;
3768
3769 case 340:
3770 #line 1164 "util/configparser.y"
3867 #line 3869 "util/configparser.c"
3868 break;
3869
3870 case 348:
3871 #line 1195 "util/configparser.y"
37713872 {
37723873 OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
37733874 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37753876 else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
37763877 free((yyvsp[0].str));
37773878 }
3778 #line 3780 "util/configparser.c"
3779 break;
3780
3781 case 341:
3782 #line 1173 "util/configparser.y"
3879 #line 3881 "util/configparser.c"
3880 break;
3881
3882 case 349:
3883 #line 1204 "util/configparser.y"
37833884 {
37843885 OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
37853886 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37873888 else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
37883889 free((yyvsp[0].str));
37893890 }
3790 #line 3792 "util/configparser.c"
3791 break;
3792
3793 case 342:
3794 #line 1182 "util/configparser.y"
3891 #line 3893 "util/configparser.c"
3892 break;
3893
3894 case 350:
3895 #line 1213 "util/configparser.y"
37953896 {
37963897 OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
37973898 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
37993900 else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
38003901 free((yyvsp[0].str));
38013902 }
3802 #line 3804 "util/configparser.c"
3803 break;
3804
3805 case 343:
3806 #line 1191 "util/configparser.y"
3903 #line 3905 "util/configparser.c"
3904 break;
3905
3906 case 351:
3907 #line 1222 "util/configparser.y"
38073908 {
38083909 OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
38093910 free(cfg_parser->cfg->identity);
38103911 cfg_parser->cfg->identity = (yyvsp[0].str);
38113912 }
3812 #line 3814 "util/configparser.c"
3813 break;
3814
3815 case 344:
3816 #line 1198 "util/configparser.y"
3913 #line 3915 "util/configparser.c"
3914 break;
3915
3916 case 352:
3917 #line 1229 "util/configparser.y"
38173918 {
38183919 OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
38193920 free(cfg_parser->cfg->version);
38203921 cfg_parser->cfg->version = (yyvsp[0].str);
38213922 }
3822 #line 3824 "util/configparser.c"
3823 break;
3824
3825 case 345:
3826 #line 1205 "util/configparser.y"
3923 #line 3925 "util/configparser.c"
3924 break;
3925
3926 case 353:
3927 #line 1236 "util/configparser.y"
38273928 {
38283929 OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
38293930 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
38303931 yyerror("buffer size expected");
38313932 free((yyvsp[0].str));
38323933 }
3833 #line 3835 "util/configparser.c"
3834 break;
3835
3836 case 346:
3837 #line 1213 "util/configparser.y"
3934 #line 3936 "util/configparser.c"
3935 break;
3936
3937 case 354:
3938 #line 1244 "util/configparser.y"
38383939 {
38393940 OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
38403941 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
38413942 yyerror("buffer size expected");
38423943 free((yyvsp[0].str));
38433944 }
3844 #line 3846 "util/configparser.c"
3845 break;
3846
3847 case 347:
3848 #line 1221 "util/configparser.y"
3945 #line 3947 "util/configparser.c"
3946 break;
3947
3948 case 355:
3949 #line 1252 "util/configparser.y"
38493950 {
38503951 OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
38513952 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38543955 (strcmp((yyvsp[0].str), "yes")==0);
38553956 free((yyvsp[0].str));
38563957 }
3857 #line 3859 "util/configparser.c"
3858 break;
3859
3860 case 348:
3861 #line 1231 "util/configparser.y"
3958 #line 3960 "util/configparser.c"
3959 break;
3960
3961 case 356:
3962 #line 1262 "util/configparser.y"
38623963 {
38633964 OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
38643965 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38673968 (strcmp((yyvsp[0].str), "yes")==0);
38683969 free((yyvsp[0].str));
38693970 }
3870 #line 3872 "util/configparser.c"
3871 break;
3872
3873 case 349:
3874 #line 1241 "util/configparser.y"
3971 #line 3973 "util/configparser.c"
3972 break;
3973
3974 case 357:
3975 #line 1272 "util/configparser.y"
38753976 {
38763977 OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
38773978 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
38803981 (strcmp((yyvsp[0].str), "yes")==0);
38813982 free((yyvsp[0].str));
38823983 }
3883 #line 3885 "util/configparser.c"
3884 break;
3885
3886 case 350:
3887 #line 1251 "util/configparser.y"
3984 #line 3986 "util/configparser.c"
3985 break;
3986
3987 case 358:
3988 #line 1282 "util/configparser.y"
3989 {
3990 OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str)));
3991 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3992 yyerror("number expected");
3993 else if (atoi((yyvsp[0].str)) > 63)
3994 yyerror("value too large (max 63)");
3995 else if (atoi((yyvsp[0].str)) < 0)
3996 yyerror("value too small (min 0)");
3997 else
3998 cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
3999 free((yyvsp[0].str));
4000 }
4001 #line 4003 "util/configparser.c"
4002 break;
4003
4004 case 359:
4005 #line 1296 "util/configparser.y"
38884006 {
38894007 OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
38904008 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
38914009 yyerror("memory size expected");
38924010 free((yyvsp[0].str));
38934011 }
3894 #line 3896 "util/configparser.c"
3895 break;
3896
3897 case 351:
3898 #line 1259 "util/configparser.y"
4012 #line 4014 "util/configparser.c"
4013 break;
4014
4015 case 360:
4016 #line 1304 "util/configparser.y"
38994017 {
39004018 OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
39014019 if(atoi((yyvsp[0].str)) == 0)
39074025 else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
39084026 free((yyvsp[0].str));
39094027 }
3910 #line 3912 "util/configparser.c"
3911 break;
3912
3913 case 352:
3914 #line 1272 "util/configparser.y"
4028 #line 4030 "util/configparser.c"
4029 break;
4030
4031 case 361:
4032 #line 1317 "util/configparser.y"
39154033 {
39164034 OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
39174035 if(atoi((yyvsp[0].str)) == 0)
39214039 else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
39224040 free((yyvsp[0].str));
39234041 }
3924 #line 3926 "util/configparser.c"
3925 break;
3926
3927 case 353:
3928 #line 1283 "util/configparser.y"
4042 #line 4044 "util/configparser.c"
4043 break;
4044
4045 case 362:
4046 #line 1328 "util/configparser.y"
39294047 {
39304048 OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
39314049 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
39324050 yyerror("memory size expected");
39334051 free((yyvsp[0].str));
39344052 }
3935 #line 3937 "util/configparser.c"
3936 break;
3937
3938 case 354:
3939 #line 1291 "util/configparser.y"
4053 #line 4055 "util/configparser.c"
4054 break;
4055
4056 case 363:
4057 #line 1336 "util/configparser.y"
39404058 {
39414059 OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
39424060 if(atoi((yyvsp[0].str)) == 0)
39484066 }
39494067 free((yyvsp[0].str));
39504068 }
3951 #line 3953 "util/configparser.c"
3952 break;
3953
3954 case 355:
3955 #line 1304 "util/configparser.y"
4069 #line 4071 "util/configparser.c"
4070 break;
4071
4072 case 364:
4073 #line 1349 "util/configparser.y"
39564074 {
39574075 OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
39584076 if(atoi((yyvsp[0].str)) == 0)
39604078 else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
39614079 free((yyvsp[0].str));
39624080 }
3963 #line 3965 "util/configparser.c"
3964 break;
3965
3966 case 356:
3967 #line 1313 "util/configparser.y"
4081 #line 4083 "util/configparser.c"
4082 break;
4083
4084 case 365:
4085 #line 1358 "util/configparser.y"
39684086 {
39694087 OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
39704088 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
39724090 else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
39734091 free((yyvsp[0].str));
39744092 }
3975 #line 3977 "util/configparser.c"
3976 break;
3977
3978 case 357:
3979 #line 1322 "util/configparser.y"
4093 #line 4095 "util/configparser.c"
4094 break;
4095
4096 case 366:
4097 #line 1367 "util/configparser.y"
39804098 {
39814099 OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
39824100 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
39844102 else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
39854103 free((yyvsp[0].str));
39864104 }
3987 #line 3989 "util/configparser.c"
3988 break;
3989
3990 case 358:
3991 #line 1331 "util/configparser.y"
4105 #line 4107 "util/configparser.c"
4106 break;
4107
4108 case 367:
4109 #line 1376 "util/configparser.y"
39924110 {
39934111 OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
39944112 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
39974115 (strcmp((yyvsp[0].str), "yes")==0);
39984116 free((yyvsp[0].str));
39994117 }
4000 #line 4002 "util/configparser.c"
4001 break;
4002
4003 case 359:
4004 #line 1341 "util/configparser.y"
4118 #line 4120 "util/configparser.c"
4119 break;
4120
4121 case 368:
4122 #line 1386 "util/configparser.y"
40054123 {
40064124 OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
40074125 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
40104128 (strcmp((yyvsp[0].str), "yes")==0);
40114129 free((yyvsp[0].str));
40124130 }
4013 #line 4015 "util/configparser.c"
4014 break;
4015
4016 case 360:
4017 #line 1351 "util/configparser.y"
4131 #line 4133 "util/configparser.c"
4132 break;
4133
4134 case 369:
4135 #line 1396 "util/configparser.y"
40184136 {
40194137 OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
40204138 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
40214139 yyerror("memory size expected");
40224140 free((yyvsp[0].str));
40234141 }
4024 #line 4026 "util/configparser.c"
4025 break;
4026
4027 case 361:
4028 #line 1359 "util/configparser.y"
4142 #line 4144 "util/configparser.c"
4143 break;
4144
4145 case 370:
4146 #line 1404 "util/configparser.y"
40294147 {
40304148 OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
40314149 if(atoi((yyvsp[0].str)) == 0)
40374155 }
40384156 free((yyvsp[0].str));
40394157 }
4040 #line 4042 "util/configparser.c"
4041 break;
4042
4043 case 362:
4044 #line 1372 "util/configparser.y"
4158 #line 4160 "util/configparser.c"
4159 break;
4160
4161 case 371:
4162 #line 1417 "util/configparser.y"
40454163 {
40464164 OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
40474165 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
40494167 else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
40504168 free((yyvsp[0].str));
40514169 }
4052 #line 4054 "util/configparser.c"
4053 break;
4054
4055 case 363:
4056 #line 1381 "util/configparser.y"
4170 #line 4172 "util/configparser.c"
4171 break;
4172
4173 case 372:
4174 #line 1426 "util/configparser.y"
40574175 {
40584176 OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
40594177 verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
40604178 "removed, use infra-host-ttl)", (yyvsp[0].str));
40614179 free((yyvsp[0].str));
40624180 }
4063 #line 4065 "util/configparser.c"
4064 break;
4065
4066 case 364:
4067 #line 1389 "util/configparser.y"
4181 #line 4183 "util/configparser.c"
4182 break;
4183
4184 case 373:
4185 #line 1434 "util/configparser.y"
40684186 {
40694187 OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
40704188 if(atoi((yyvsp[0].str)) == 0)
40724190 else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
40734191 free((yyvsp[0].str));
40744192 }
4075 #line 4077 "util/configparser.c"
4076 break;
4077
4078 case 365:
4079 #line 1398 "util/configparser.y"
4193 #line 4195 "util/configparser.c"
4194 break;
4195
4196 case 374:
4197 #line 1443 "util/configparser.y"
40804198 {
40814199 OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
40824200 verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
40834201 "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
40844202 free((yyvsp[0].str));
40854203 }
4086 #line 4088 "util/configparser.c"
4087 break;
4088
4089 case 366:
4090 #line 1406 "util/configparser.y"
4204 #line 4206 "util/configparser.c"
4205 break;
4206
4207 case 375:
4208 #line 1451 "util/configparser.y"
40914209 {
40924210 OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
40934211 if(atoi((yyvsp[0].str)) == 0)
40994217 }
41004218 free((yyvsp[0].str));
41014219 }
4102 #line 4104 "util/configparser.c"
4103 break;
4104
4105 case 367:
4106 #line 1419 "util/configparser.y"
4220 #line 4222 "util/configparser.c"
4221 break;
4222
4223 case 376:
4224 #line 1464 "util/configparser.y"
41074225 {
41084226 OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
41094227 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
41114229 else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
41124230 free((yyvsp[0].str));
41134231 }
4114 #line 4116 "util/configparser.c"
4115 break;
4116
4117 case 368:
4118 #line 1428 "util/configparser.y"
4232 #line 4234 "util/configparser.c"
4233 break;
4234
4235 case 377:
4236 #line 1473 "util/configparser.y"
41194237 {
41204238 OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
41214239 free(cfg_parser->cfg->target_fetch_policy);
41224240 cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
41234241 }
4124 #line 4126 "util/configparser.c"
4125 break;
4126
4127 case 369:
4128 #line 1435 "util/configparser.y"
4242 #line 4244 "util/configparser.c"
4243 break;
4244
4245 case 378:
4246 #line 1480 "util/configparser.y"
41294247 {
41304248 OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
41314249 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
41344252 (strcmp((yyvsp[0].str), "yes")==0);
41354253 free((yyvsp[0].str));
41364254 }
4137 #line 4139 "util/configparser.c"
4138 break;
4139
4140 case 370:
4141 #line 1445 "util/configparser.y"
4255 #line 4257 "util/configparser.c"
4256 break;
4257
4258 case 379:
4259 #line 1490 "util/configparser.y"
41424260 {
41434261 OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
41444262 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
41474265 (strcmp((yyvsp[0].str), "yes")==0);
41484266 free((yyvsp[0].str));
41494267 }
4150 #line 4152 "util/configparser.c"
4151 break;
4152
4153 case 371:
4154 #line 1455 "util/configparser.y"
4268 #line 4270 "util/configparser.c"
4269 break;
4270
4271 case 380:
4272 #line 1500 "util/configparser.y"
41554273 {
41564274 OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
41574275 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
41604278 (strcmp((yyvsp[0].str), "yes")==0);
41614279 free((yyvsp[0].str));
41624280 }
4163 #line 4165 "util/configparser.c"
4164 break;
4165
4166 case 372:
4167 #line 1465 "util/configparser.y"
4281 #line 4283 "util/configparser.c"
4282 break;
4283
4284 case 381:
4285 #line 1510 "util/configparser.y"
41684286 {
41694287 OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
41704288 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
41734291 (strcmp((yyvsp[0].str), "yes")==0);
41744292 free((yyvsp[0].str));
41754293 }
4176 #line 4178 "util/configparser.c"
4177 break;
4178
4179 case 373:
4180 #line 1475 "util/configparser.y"
4294 #line 4296 "util/configparser.c"
4295 break;
4296
4297 case 382:
4298 #line 1520 "util/configparser.y"
41814299 {
41824300 OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
41834301 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
41864304 (strcmp((yyvsp[0].str), "yes")==0);
41874305 free((yyvsp[0].str));
41884306 }
4189 #line 4191 "util/configparser.c"
4190 break;
4191
4192 case 374:
4193 #line 1485 "util/configparser.y"
4307 #line 4309 "util/configparser.c"
4308 break;
4309
4310 case 383:
4311 #line 1530 "util/configparser.y"
41944312 {
41954313 OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
41964314 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
41994317 (strcmp((yyvsp[0].str), "yes")==0);
42004318 free((yyvsp[0].str));
42014319 }
4202 #line 4204 "util/configparser.c"
4203 break;
4204
4205 case 375:
4206 #line 1495 "util/configparser.y"
4320 #line 4322 "util/configparser.c"
4321 break;
4322
4323 case 384:
4324 #line 1540 "util/configparser.y"
42074325 {
42084326 OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
42094327 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
42124330 (strcmp((yyvsp[0].str), "yes")==0);
42134331 free((yyvsp[0].str));
42144332 }
4215 #line 4217 "util/configparser.c"
4216 break;
4217
4218 case 376:
4219 #line 1505 "util/configparser.y"
4333 #line 4335 "util/configparser.c"
4334 break;
4335
4336 case 385:
4337 #line 1550 "util/configparser.y"
42204338 {
42214339 OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
42224340 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
42254343 (strcmp((yyvsp[0].str), "yes")==0);
42264344 free((yyvsp[0].str));
42274345 }
4228 #line 4230 "util/configparser.c"
4229 break;
4230
4231 case 377:
4232 #line 1515 "util/configparser.y"
4346 #line 4348 "util/configparser.c"
4347 break;
4348
4349 case 386:
4350 #line 1560 "util/configparser.y"
42334351 {
42344352 OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
42354353 if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
42364354 yyerror("out of memory");
42374355 }
4238 #line 4240 "util/configparser.c"
4239 break;
4240
4241 case 378:
4242 #line 1522 "util/configparser.y"
4356 #line 4358 "util/configparser.c"
4357 break;
4358
4359 case 387:
4360 #line 1567 "util/configparser.y"
42434361 {
42444362 OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
42454363 if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
42464364 yyerror("out of memory");
42474365 }
4248 #line 4250 "util/configparser.c"
4249 break;
4250
4251 case 379:
4252 #line 1529 "util/configparser.y"
4366 #line 4368 "util/configparser.c"
4367 break;
4368
4369 case 388:
4370 #line 1574 "util/configparser.y"
42534371 {
42544372 OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
42554373 if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
42564374 yyerror("out of memory");
42574375 }
4258 #line 4260 "util/configparser.c"
4259 break;
4260
4261 case 380:
4262 #line 1536 "util/configparser.y"
4376 #line 4378 "util/configparser.c"
4377 break;
4378
4379 case 389:
4380 #line 1581 "util/configparser.y"
42634381 {
42644382 OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
42654383 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
42674385 else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
42684386 free((yyvsp[0].str));
42694387 }
4270 #line 4272 "util/configparser.c"
4271 break;
4272
4273 case 381:
4274 #line 1545 "util/configparser.y"
4388 #line 4390 "util/configparser.c"
4389 break;
4390
4391 case 390:
4392 #line 1590 "util/configparser.y"
42754393 {
42764394 OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
42774395 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
42794397 else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
42804398 free((yyvsp[0].str));
42814399 }
4282 #line 4284 "util/configparser.c"
4283 break;
4284
4285 case 382:
4286 #line 1554 "util/configparser.y"
4400 #line 4402 "util/configparser.c"
4401 break;
4402
4403 case 391:
4404 #line 1599 "util/configparser.y"
42874405 {
42884406 OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
42894407 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
42914409 else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
42924410 free((yyvsp[0].str));
42934411 }
4294 #line 4296 "util/configparser.c"
4295 break;
4296
4297 case 383:
4298 #line 1563 "util/configparser.y"
4412 #line 4414 "util/configparser.c"
4413 break;
4414
4415 case 392:
4416 #line 1608 "util/configparser.y"
42994417 {
43004418 OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
43014419 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
43034421 else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
43044422 free((yyvsp[0].str));
43054423 }
4306 #line 4308 "util/configparser.c"
4307 break;
4308
4309 case 384:
4310 #line 1572 "util/configparser.y"
4424 #line 4426 "util/configparser.c"
4425 break;
4426
4427 case 393:
4428 #line 1617 "util/configparser.y"
43114429 {
43124430 OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
43134431 if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
43144432 yyerror("out of memory");
43154433 }
4316 #line 4318 "util/configparser.c"
4317 break;
4318
4319 case 385:
4320 #line 1579 "util/configparser.y"
4434 #line 4436 "util/configparser.c"
4435 break;
4436
4437 case 394:
4438 #line 1624 "util/configparser.y"
43214439 {
43224440 OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
43234441 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
43264444 (strcmp((yyvsp[0].str), "yes")==0);
43274445 free((yyvsp[0].str));
43284446 }
4329 #line 4331 "util/configparser.c"
4330 break;
4331
4332 case 386:
4333 #line 1589 "util/configparser.y"
4447 #line 4449 "util/configparser.c"
4448 break;
4449
4450 case 395:
4451 #line 1634 "util/configparser.y"
43344452 {
43354453 OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
43364454 if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 &&
43494467 fatal_exit("out of memory adding acl");
43504468 }
43514469 }
4352 #line 4354 "util/configparser.c"
4353 break;
4354
4355 case 387:
4356 #line 1609 "util/configparser.y"
4470 #line 4472 "util/configparser.c"
4471 break;
4472
4473 case 396:
4474 #line 1654 "util/configparser.y"
43574475 {
43584476 OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
43594477 free(cfg_parser->cfg->module_conf);
43604478 cfg_parser->cfg->module_conf = (yyvsp[0].str);
43614479 }
4362 #line 4364 "util/configparser.c"
4363 break;
4364
4365 case 388:
4366 #line 1616 "util/configparser.y"
4480 #line 4482 "util/configparser.c"
4481 break;
4482
4483 case 397:
4484 #line 1661 "util/configparser.y"
43674485 {
43684486 OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
43694487 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
43804498 }
43814499 free((yyvsp[0].str));
43824500 }
4383 #line 4385 "util/configparser.c"
4384 break;
4385
4386 case 389:
4387 #line 1634 "util/configparser.y"
4501 #line 4503 "util/configparser.c"
4502 break;
4503
4504 case 398:
4505 #line 1679 "util/configparser.y"
43884506 {
43894507 OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
43904508 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
43964514 }
43974515 free((yyvsp[0].str));
43984516 }
4399 #line 4401 "util/configparser.c"
4400 break;
4401
4402 case 390:
4403 #line 1647 "util/configparser.y"
4517 #line 4519 "util/configparser.c"
4518 break;
4519
4520 case 399:
4521 #line 1692 "util/configparser.y"
44044522 {
44054523 OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
44064524 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
44124530 }
44134531 free((yyvsp[0].str));
44144532 }
4415 #line 4417 "util/configparser.c"
4416 break;
4417
4418 case 391:
4419 #line 1660 "util/configparser.y"
4533 #line 4535 "util/configparser.c"
4534 break;
4535
4536 case 400:
4537 #line 1705 "util/configparser.y"
44204538 {
44214539 OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
44224540 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
44244542 else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
44254543 free((yyvsp[0].str));
44264544 }
4427 #line 4429 "util/configparser.c"
4428 break;
4429
4430 case 392:
4431 #line 1669 "util/configparser.y"
4545 #line 4547 "util/configparser.c"
4546 break;
4547
4548 case 401:
4549 #line 1714 "util/configparser.y"
44324550 {
44334551 OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
44344552 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
44364554 else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
44374555 free((yyvsp[0].str));
44384556 }
4439 #line 4441 "util/configparser.c"
4440 break;
4441
4442 case 393:
4443 #line 1678 "util/configparser.y"
4557 #line 4559 "util/configparser.c"
4558 break;
4559
4560 case 402:
4561 #line 1723 "util/configparser.y"
44444562 {
44454563 OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
44464564 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
44484566 else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
44494567 free((yyvsp[0].str));
44504568 }
4451 #line 4453 "util/configparser.c"
4452 break;
4453
4454 case 394:
4455 #line 1687 "util/configparser.y"
4569 #line 4571 "util/configparser.c"
4570 break;
4571
4572 case 403:
4573 #line 1732 "util/configparser.y"
44564574 {
44574575 OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
44584576 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
44604578 else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
44614579 free((yyvsp[0].str));
44624580 }
4463 #line 4465 "util/configparser.c"
4464 break;
4465
4466 case 395:
4467 #line 1696 "util/configparser.y"
4581 #line 4583 "util/configparser.c"
4582 break;
4583
4584 case 404:
4585 #line 1741 "util/configparser.y"
44684586 {
44694587 OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
44704588 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
44734591 (strcmp((yyvsp[0].str), "yes")==0);
44744592 free((yyvsp[0].str));
44754593 }
4476 #line 4478 "util/configparser.c"
4477 break;
4478
4479 case 396:
4480 #line 1706 "util/configparser.y"
4594 #line 4596 "util/configparser.c"
4595 break;
4596
4597 case 405:
4598 #line 1751 "util/configparser.y"
44814599 {
44824600 OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
44834601 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
44864604 (strcmp((yyvsp[0].str), "yes")==0);
44874605 free((yyvsp[0].str));
44884606 }
4489 #line 4491 "util/configparser.c"
4490 break;
4491
4492 case 397:
4493 #line 1716 "util/configparser.y"
4607 #line 4609 "util/configparser.c"
4608 break;
4609
4610 case 406:
4611 #line 1761 "util/configparser.y"
44944612 {
44954613 OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
44964614 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
45004618 (strcmp((yyvsp[0].str), "yes")==0);
45014619 free((yyvsp[0].str));
45024620 }
4503 #line 4505 "util/configparser.c"
4504 break;
4505
4506 case 398:
4507 #line 1727 "util/configparser.y"
4621 #line 4623 "util/configparser.c"
4622 break;
4623
4624 case 407:
4625 #line 1772 "util/configparser.y"
45084626 {
45094627 OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
45104628 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
45124630 else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
45134631 free((yyvsp[0].str));
45144632 }
4515 #line 4517 "util/configparser.c"
4516 break;
4517
4518 case 399:
4519 #line 1736 "util/configparser.y"
4633 #line 4635 "util/configparser.c"
4634 break;
4635
4636 case 408:
4637 #line 1781 "util/configparser.y"
45204638 {
45214639 OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
45224640 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
45244642 else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
45254643 free((yyvsp[0].str));
45264644 }
4527 #line 4529 "util/configparser.c"
4528 break;
4529
4530 case 400:
4531 #line 1745 "util/configparser.y"
4645 #line 4647 "util/configparser.c"
4646 break;
4647
4648 case 409:
4649 #line 1790 "util/configparser.y"
45324650 {
45334651 OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
45344652 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
45364654 else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
45374655 free((yyvsp[0].str));
45384656 }
4539 #line 4541 "util/configparser.c"
4540 break;
4541
4542 case 401:
4543 #line 1754 "util/configparser.y"
4657 #line 4659 "util/configparser.c"
4658 break;
4659
4660 case 410:
4661 #line 1799 "util/configparser.y"
45444662 {
45454663 OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
45464664 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
45484666 else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
45494667 free((yyvsp[0].str));
45504668 }
4551 #line 4553 "util/configparser.c"
4552 break;
4553
4554 case 402:
4555 #line 1763 "util/configparser.y"
4669 #line 4671 "util/configparser.c"
4670 break;
4671
4672 case 411:
4673 #line 1808 "util/configparser.y"
45564674 {
45574675 OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
45584676 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
45604678 else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
45614679 free((yyvsp[0].str));
45624680 }
4563 #line 4565 "util/configparser.c"
4564 break;
4565
4566 case 403:
4567 #line 1772 "util/configparser.y"
4681 #line 4683 "util/configparser.c"
4682 break;
4683
4684 case 412:
4685 #line 1817 "util/configparser.y"
45684686 {
45694687 OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
45704688 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
45724690 else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
45734691 free((yyvsp[0].str));
45744692 }
4575 #line 4577 "util/configparser.c"
4576 break;
4577
4578 case 404:
4579 #line 1781 "util/configparser.y"
4693 #line 4695 "util/configparser.c"
4694 break;
4695
4696 case 413:
4697 #line 1826 "util/configparser.y"
45804698 {
45814699 OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
45824700 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
45884706 #endif
45894707 free((yyvsp[0].str));
45904708 }
4591 #line 4593 "util/configparser.c"
4592 break;
4593
4594 case 405:
4595 #line 1794 "util/configparser.y"
4709 #line 4711 "util/configparser.c"
4710 break;
4711
4712 case 414:
4713 #line 1839 "util/configparser.y"
45964714 {
45974715 OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
45984716 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
46044722 #endif
46054723 free((yyvsp[0].str));
46064724 }
4607 #line 4609 "util/configparser.c"
4608 break;
4609
4610 case 406:
4611 #line 1807 "util/configparser.y"
4725 #line 4727 "util/configparser.c"
4726 break;
4727
4728 case 415:
4729 #line 1852 "util/configparser.y"
46124730 {
46134731 OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
46144732 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
46164734 else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
46174735 free((yyvsp[0].str));
46184736 }
4619 #line 4621 "util/configparser.c"
4620 break;
4621
4622 case 407:
4623 #line 1816 "util/configparser.y"
4737 #line 4739 "util/configparser.c"
4738 break;
4739
4740 case 416:
4741 #line 1861 "util/configparser.y"
46244742 {
46254743 OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
46264744 free(cfg_parser->cfg->val_nsec3_key_iterations);
46274745 cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
46284746 }
4629 #line 4631 "util/configparser.c"
4630 break;
4631
4632 case 408:
4633 #line 1823 "util/configparser.y"
4747 #line 4749 "util/configparser.c"
4748 break;
4749
4750 case 417:
4751 #line 1868 "util/configparser.y"
46344752 {
46354753 OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
46364754 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
46384756 else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
46394757 free((yyvsp[0].str));
46404758 }
4641 #line 4643 "util/configparser.c"
4642 break;
4643
4644 case 409:
4645 #line 1832 "util/configparser.y"
4759 #line 4761 "util/configparser.c"
4760 break;
4761
4762 case 418:
4763 #line 1877 "util/configparser.y"
46464764 {
46474765 OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
46484766 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
46504768 else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
46514769 free((yyvsp[0].str));
46524770 }
4653 #line 4655 "util/configparser.c"
4654 break;
4655
4656 case 410:
4657 #line 1841 "util/configparser.y"
4771 #line 4773 "util/configparser.c"
4772 break;
4773
4774 case 419:
4775 #line 1886 "util/configparser.y"
46584776 {
46594777 OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
46604778 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
46624780 else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
46634781 free((yyvsp[0].str));
46644782 }
4665 #line 4667 "util/configparser.c"
4666 break;
4667
4668 case 411:
4669 #line 1850 "util/configparser.y"
4783 #line 4785 "util/configparser.c"
4784 break;
4785
4786 case 420:
4787 #line 1895 "util/configparser.y"
46704788 {
46714789 OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
46724790 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
46754793 (strcmp((yyvsp[0].str), "yes")==0);
46764794 free((yyvsp[0].str));
46774795 }
4678 #line 4680 "util/configparser.c"
4679 break;
4680
4681 case 412:
4682 #line 1859 "util/configparser.y"
4796 #line 4798 "util/configparser.c"
4797 break;
4798
4799 case 421:
4800 #line 1904 "util/configparser.y"
46834801 {
46844802 OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
46854803 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
46864804 yyerror("memory size expected");
46874805 free((yyvsp[0].str));
46884806 }
4689 #line 4691 "util/configparser.c"
4690 break;
4691
4692 case 413:
4693 #line 1867 "util/configparser.y"
4807 #line 4809 "util/configparser.c"
4808 break;
4809
4810 case 422:
4811 #line 1912 "util/configparser.y"
46944812 {
46954813 OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
46964814 if(atoi((yyvsp[0].str)) == 0)
47024820 }
47034821 free((yyvsp[0].str));
47044822 }
4705 #line 4707 "util/configparser.c"
4706 break;
4707
4708 case 414:
4709 #line 1880 "util/configparser.y"
4823 #line 4825 "util/configparser.c"
4824 break;
4825
4826 case 423:
4827 #line 1925 "util/configparser.y"
47104828 {
47114829 OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
47124830 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
47134831 yyerror("memory size expected");
47144832 free((yyvsp[0].str));
47154833 }
4716 #line 4718 "util/configparser.c"
4717 break;
4718
4719 case 415:
4720 #line 1888 "util/configparser.y"
4834 #line 4836 "util/configparser.c"
4835 break;
4836
4837 case 424:
4838 #line 1933 "util/configparser.y"
47214839 {
47224840 OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
47234841 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
47574875 fatal_exit("out of memory adding local-zone");
47584876 }
47594877 }
4760 #line 4762 "util/configparser.c"
4761 break;
4762
4763 case 416:
4764 #line 1929 "util/configparser.y"
4878 #line 4880 "util/configparser.c"
4879 break;
4880
4881 case 425:
4882 #line 1974 "util/configparser.y"
47654883 {
47664884 OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
47674885 if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
47684886 fatal_exit("out of memory adding local-data");
47694887 }
4770 #line 4772 "util/configparser.c"
4771 break;
4772
4773 case 417:
4774 #line 1936 "util/configparser.y"
4888 #line 4890 "util/configparser.c"
4889 break;
4890
4891 case 426:
4892 #line 1981 "util/configparser.y"
47754893 {
47764894 char* ptr;
47774895 OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
47854903 yyerror("local-data-ptr could not be reversed");
47864904 }
47874905 }
4788 #line 4790 "util/configparser.c"
4789 break;
4790
4791 case 418:
4792 #line 1951 "util/configparser.y"
4906 #line 4908 "util/configparser.c"
4907 break;
4908
4909 case 427:
4910 #line 1996 "util/configparser.y"
47934911 {
47944912 OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
47954913 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
47984916 (strcmp((yyvsp[0].str), "yes")==0);
47994917 free((yyvsp[0].str));
48004918 }
4801 #line 4803 "util/configparser.c"
4802 break;
4803
4804 case 419:
4805 #line 1961 "util/configparser.y"
4919 #line 4921 "util/configparser.c"
4920 break;
4921
4922 case 428:
4923 #line 2006 "util/configparser.y"
48064924 {
48074925 OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
48084926 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
48114929 (strcmp((yyvsp[0].str), "yes")==0);
48124930 free((yyvsp[0].str));
48134931 }
4814 #line 4816 "util/configparser.c"
4815 break;
4816
4817 case 420:
4818 #line 1971 "util/configparser.y"
4932 #line 4934 "util/configparser.c"
4933 break;
4934
4935 case 429:
4936 #line 2016 "util/configparser.y"
48194937 {
48204938 OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
48214939 cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
48224940 free((yyvsp[0].str));
48234941 }
4824 #line 4826 "util/configparser.c"
4825 break;
4826
4827 case 421:
4828 #line 1978 "util/configparser.y"
4942 #line 4944 "util/configparser.c"
4943 break;
4944
4945 case 430:
4946 #line 2023 "util/configparser.y"
48294947 {
48304948 OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
48314949 cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
48324950 free((yyvsp[0].str));
48334951 }
4834 #line 4836 "util/configparser.c"
4835 break;
4836
4837 case 422:
4838 #line 1985 "util/configparser.y"
4952 #line 4954 "util/configparser.c"
4953 break;
4954
4955 case 431:
4956 #line 2030 "util/configparser.y"
48394957 {
48404958 OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
48414959 free(cfg_parser->cfg->dns64_prefix);
48424960 cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
48434961 }
4844 #line 4846 "util/configparser.c"
4845 break;
4846
4847 case 423:
4848 #line 1992 "util/configparser.y"
4962 #line 4964 "util/configparser.c"
4963 break;
4964
4965 case 432:
4966 #line 2037 "util/configparser.y"
48494967 {
48504968 OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
48514969 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
48534971 else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
48544972 free((yyvsp[0].str));
48554973 }
4856 #line 4858 "util/configparser.c"
4857 break;
4858
4859 case 424:
4860 #line 2001 "util/configparser.y"
4974 #line 4976 "util/configparser.c"
4975 break;
4976
4977 case 433:
4978 #line 2046 "util/configparser.y"
48614979 {
48624980 OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
48634981 if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
48644982 (yyvsp[0].str)))
48654983 fatal_exit("out of memory adding dns64-ignore-aaaa");
48664984 }
4867 #line 4869 "util/configparser.c"
4868 break;
4869
4870 case 425:
4871 #line 2009 "util/configparser.y"
4985 #line 4987 "util/configparser.c"
4986 break;
4987
4988 case 434:
4989 #line 2054 "util/configparser.y"
48724990 {
48734991 char* p, *s = (yyvsp[0].str);
48744992 OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
48814999 }
48825000 free((yyvsp[0].str));
48835001 }
4884 #line 4886 "util/configparser.c"
4885 break;
4886
4887 case 426:
4888 #line 2023 "util/configparser.y"
5002 #line 5004 "util/configparser.c"
5003 break;
5004
5005 case 435:
5006 #line 2068 "util/configparser.y"
48895007 {
48905008 size_t len = 0;
48915009 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
49055023 }
49065024 }
49075025 }
4908 #line 4910 "util/configparser.c"
4909 break;
4910
4911 case 427:
4912 #line 2044 "util/configparser.y"
5026 #line 5028 "util/configparser.c"
5027 break;
5028
5029 case 436:
5030 #line 2089 "util/configparser.y"
49135031 {
49145032 size_t len = 0;
49155033 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
49295047 }
49305048 }
49315049 }
4932 #line 4934 "util/configparser.c"
4933 break;
4934
4935 case 428:
4936 #line 2065 "util/configparser.y"
5050 #line 5052 "util/configparser.c"
5051 break;
5052
5053 case 437:
5054 #line 2110 "util/configparser.y"
49375055 {
49385056 OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
49395057 if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
49445062 free((yyvsp[0].str));
49455063 }
49465064 }
4947 #line 4949 "util/configparser.c"
4948 break;
4949
4950 case 429:
4951 #line 2077 "util/configparser.y"
5065 #line 5067 "util/configparser.c"
5066 break;
5067
5068 case 438:
5069 #line 2122 "util/configparser.y"
49525070 {
49535071 OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
49545072 if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
49595077 free((yyvsp[0].str));
49605078 }
49615079 }
4962 #line 4964 "util/configparser.c"
4963 break;
4964
4965 case 430:
4966 #line 2089 "util/configparser.y"
5080 #line 5082 "util/configparser.c"
5081 break;
5082
5083 case 439:
5084 #line 2134 "util/configparser.y"
49675085 {
49685086 OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
49695087 if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
49745092 free((yyvsp[0].str));
49755093 }
49765094 }
4977 #line 4979 "util/configparser.c"
4978 break;
4979
4980 case 431:
4981 #line 2101 "util/configparser.y"
5095 #line 5097 "util/configparser.c"
5096 break;
5097
5098 case 440:
5099 #line 2146 "util/configparser.y"
49825100 {
49835101 OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
49845102 if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
49865104 yyerror("out of memory");
49875105 }
49885106 }
4989 #line 4991 "util/configparser.c"
4990 break;
4991
4992 case 432:
4993 #line 2110 "util/configparser.y"
5107 #line 5109 "util/configparser.c"
5108 break;
5109
5110 case 441:
5111 #line 2155 "util/configparser.y"
49945112 {
49955113 size_t len = 0;
49965114 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
50105128 }
50115129 }
50125130 }
5013 #line 5015 "util/configparser.c"
5014 break;
5015
5016 case 433:
5017 #line 2131 "util/configparser.y"
5131 #line 5133 "util/configparser.c"
5132 break;
5133
5134 case 442:
5135 #line 2176 "util/configparser.y"
50185136 {
50195137 OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
50205138 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
50225140 else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
50235141 free((yyvsp[0].str));
50245142 }
5025 #line 5027 "util/configparser.c"
5026 break;
5027
5028 case 434:
5029 #line 2141 "util/configparser.y"
5143 #line 5145 "util/configparser.c"
5144 break;
5145
5146 case 443:
5147 #line 2186 "util/configparser.y"
50305148 {
50315149 OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
50325150 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
50345152 else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
50355153 free((yyvsp[0].str));
50365154 }
5037 #line 5039 "util/configparser.c"
5038 break;
5039
5040 case 435:
5041 #line 2150 "util/configparser.y"
5155 #line 5157 "util/configparser.c"
5156 break;
5157
5158 case 444:
5159 #line 2195 "util/configparser.y"
50425160 {
50435161 OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
50445162 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
50455163 yyerror("memory size expected");
50465164 free((yyvsp[0].str));
50475165 }
5048 #line 5050 "util/configparser.c"
5049 break;
5050
5051 case 436:
5052 #line 2158 "util/configparser.y"
5166 #line 5168 "util/configparser.c"
5167 break;
5168
5169 case 445:
5170 #line 2203 "util/configparser.y"
50535171 {
50545172 OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
50555173 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
50565174 yyerror("memory size expected");
50575175 free((yyvsp[0].str));
50585176 }
5059 #line 5061 "util/configparser.c"
5060 break;
5061
5062 case 437:
5063 #line 2166 "util/configparser.y"
5177 #line 5179 "util/configparser.c"
5178 break;
5179
5180 case 446:
5181 #line 2211 "util/configparser.y"
50645182 {
50655183 OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
50665184 if(atoi((yyvsp[0].str)) == 0)
50725190 }
50735191 free((yyvsp[0].str));
50745192 }
5075 #line 5077 "util/configparser.c"
5076 break;
5077
5078 case 438:
5079 #line 2179 "util/configparser.y"
5193 #line 5195 "util/configparser.c"
5194 break;
5195
5196 case 447:
5197 #line 2224 "util/configparser.y"
50805198 {
50815199 OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
50825200 if(atoi((yyvsp[0].str)) == 0)
50885206 }
50895207 free((yyvsp[0].str));
50905208 }
5091 #line 5093 "util/configparser.c"
5092 break;
5093
5094 case 439:
5095 #line 2192 "util/configparser.y"
5209 #line 5211 "util/configparser.c"
5210 break;
5211
5212 case 448:
5213 #line 2237 "util/configparser.y"
50965214 {
50975215 OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
50985216 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
51065224 "ratelimit-for-domain");
51075225 }
51085226 }
5109 #line 5111 "util/configparser.c"
5110 break;
5111
5112 case 440:
5113 #line 2207 "util/configparser.y"
5227 #line 5229 "util/configparser.c"
5228 break;
5229
5230 case 449:
5231 #line 2252 "util/configparser.y"
51145232 {
51155233 OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
51165234 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
51245242 "ratelimit-below-domain");
51255243 }
51265244 }
5127 #line 5129 "util/configparser.c"
5128 break;
5129
5130 case 441:
5131 #line 2222 "util/configparser.y"
5245 #line 5247 "util/configparser.c"
5246 break;
5247
5248 case 450:
5249 #line 2267 "util/configparser.y"
51325250 {
51335251 OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
51345252 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
51365254 else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
51375255 free((yyvsp[0].str));
51385256 }
5139 #line 5141 "util/configparser.c"
5140 break;
5141
5142 case 442:
5143 #line 2231 "util/configparser.y"
5257 #line 5259 "util/configparser.c"
5258 break;
5259
5260 case 451:
5261 #line 2276 "util/configparser.y"
51445262 {
51455263 OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
51465264 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
51485266 else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
51495267 free((yyvsp[0].str));
51505268 }
5151 #line 5153 "util/configparser.c"
5152 break;
5153
5154 case 443:
5155 #line 2240 "util/configparser.y"
5269 #line 5271 "util/configparser.c"
5270 break;
5271
5272 case 452:
5273 #line 2285 "util/configparser.y"
51565274 {
51575275 OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
51585276 free((yyvsp[0].str));
51595277 }
5160 #line 5162 "util/configparser.c"
5161 break;
5162
5163 case 444:
5164 #line 2246 "util/configparser.y"
5278 #line 5280 "util/configparser.c"
5279 break;
5280
5281 case 453:
5282 #line 2291 "util/configparser.y"
51655283 {
51665284 OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
51675285 if(atoi((yyvsp[0].str)) <= 0)
51695287 else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
51705288 free((yyvsp[0].str));
51715289 }
5172 #line 5174 "util/configparser.c"
5173 break;
5174
5175 case 445:
5176 #line 2255 "util/configparser.y"
5290 #line 5292 "util/configparser.c"
5291 break;
5292
5293 case 454:
5294 #line 2300 "util/configparser.y"
51775295 {
51785296 OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
51795297 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
51815299 else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
51825300 free((yyvsp[0].str));
51835301 }
5184 #line 5186 "util/configparser.c"
5185 break;
5186
5187 case 446:
5188 #line 2264 "util/configparser.y"
5302 #line 5304 "util/configparser.c"
5303 break;
5304
5305 case 455:
5306 #line 2309 "util/configparser.y"
51895307 {
51905308 OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
51915309 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
51945312 (strcmp((yyvsp[0].str), "yes")==0);
51955313 free((yyvsp[0].str));
51965314 }
5197 #line 5199 "util/configparser.c"
5198 break;
5199
5200 case 447:
5201 #line 2274 "util/configparser.y"
5315 #line 5317 "util/configparser.c"
5316 break;
5317
5318 case 456:
5319 #line 2319 "util/configparser.y"
52025320 {
52035321 OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
52045322 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
52075325 (strcmp((yyvsp[0].str), "yes")==0);
52085326 free((yyvsp[0].str));
52095327 }
5210 #line 5212 "util/configparser.c"
5211 break;
5212
5213 case 448:
5214 #line 2284 "util/configparser.y"
5328 #line 5330 "util/configparser.c"
5329 break;
5330
5331 case 457:
5332 #line 2329 "util/configparser.y"
52155333 {
52165334 #ifdef USE_IPSECMOD
52175335 OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
52235341 #endif
52245342 free((yyvsp[0].str));
52255343 }
5226 #line 5228 "util/configparser.c"
5227 break;
5228
5229 case 449:
5230 #line 2297 "util/configparser.y"
5344 #line 5346 "util/configparser.c"
5345 break;
5346
5347 case 458:
5348 #line 2342 "util/configparser.y"
52315349 {
52325350 #ifdef USE_IPSECMOD
52335351 OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
52395357 #endif
52405358 free((yyvsp[0].str));
52415359 }
5242 #line 5244 "util/configparser.c"
5243 break;
5244
5245 case 450:
5246 #line 2310 "util/configparser.y"
5360 #line 5362 "util/configparser.c"
5361 break;
5362
5363 case 459:
5364 #line 2355 "util/configparser.y"
52475365 {
52485366 #ifdef USE_IPSECMOD
52495367 OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
52545372 free((yyvsp[0].str));
52555373 #endif
52565374 }
5257 #line 5259 "util/configparser.c"
5258 break;
5259
5260 case 451:
5261 #line 2322 "util/configparser.y"
5375 #line 5377 "util/configparser.c"
5376 break;
5377
5378 case 460:
5379 #line 2367 "util/configparser.y"
52625380 {
52635381 #ifdef USE_IPSECMOD
52645382 OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
52715389 free((yyvsp[0].str));
52725390 #endif
52735391 }
5274 #line 5276 "util/configparser.c"
5275 break;
5276
5277 case 452:
5278 #line 2336 "util/configparser.y"
5392 #line 5394 "util/configparser.c"
5393 break;
5394
5395 case 461:
5396 #line 2381 "util/configparser.y"
52795397 {
52805398 #ifdef USE_IPSECMOD
52815399 OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
52865404 free((yyvsp[0].str));
52875405 #endif
52885406 }
5289 #line 5291 "util/configparser.c"
5290 break;
5291
5292 case 453:
5293 #line 2348 "util/configparser.y"
5407 #line 5409 "util/configparser.c"
5408 break;
5409
5410 case 462:
5411 #line 2393 "util/configparser.y"
52945412 {
52955413 #ifdef USE_IPSECMOD
52965414 OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
53035421 free((yyvsp[0].str));
53045422 #endif
53055423 }
5306 #line 5308 "util/configparser.c"
5307 break;
5308
5309 case 454:
5310 #line 2362 "util/configparser.y"
5424 #line 5426 "util/configparser.c"
5425 break;
5426
5427 case 463:
5428 #line 2407 "util/configparser.y"
53115429 {
53125430 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
53135431 if(cfg_parser->cfg->stubs->name)
53165434 free(cfg_parser->cfg->stubs->name);
53175435 cfg_parser->cfg->stubs->name = (yyvsp[0].str);
53185436 }
5319 #line 5321 "util/configparser.c"
5320 break;
5321
5322 case 455:
5323 #line 2372 "util/configparser.y"
5437 #line 5439 "util/configparser.c"
5438 break;
5439
5440 case 464:
5441 #line 2417 "util/configparser.y"
53245442 {
53255443 OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
53265444 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
53275445 yyerror("out of memory");
53285446 }
5329 #line 5331 "util/configparser.c"
5330 break;
5331
5332 case 456:
5333 #line 2379 "util/configparser.y"
5447 #line 5449 "util/configparser.c"
5448 break;
5449
5450 case 465:
5451 #line 2424 "util/configparser.y"
53345452 {
53355453 OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
53365454 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
53375455 yyerror("out of memory");
53385456 }
5339 #line 5341 "util/configparser.c"
5340 break;
5341
5342 case 457:
5343 #line 2386 "util/configparser.y"
5457 #line 5459 "util/configparser.c"
5458 break;
5459
5460 case 466:
5461 #line 2431 "util/configparser.y"
53445462 {
53455463 OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
53465464 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
53485466 else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
53495467 free((yyvsp[0].str));
53505468 }
5351 #line 5353 "util/configparser.c"
5352 break;
5353
5354 case 458:
5355 #line 2395 "util/configparser.y"
5469 #line 5471 "util/configparser.c"
5470 break;
5471
5472 case 467:
5473 #line 2440 "util/configparser.y"
53565474 {
53575475 OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
53585476 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
53605478 else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
53615479 free((yyvsp[0].str));
53625480 }
5363 #line 5365 "util/configparser.c"
5364 break;
5365
5366 case 459:
5367 #line 2404 "util/configparser.y"
5481 #line 5483 "util/configparser.c"
5482 break;
5483
5484 case 468:
5485 #line 2449 "util/configparser.y"
53685486 {
53695487 OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
53705488 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
53735491 (strcmp((yyvsp[0].str), "yes")==0);
53745492 free((yyvsp[0].str));
53755493 }
5376 #line 5378 "util/configparser.c"
5377 break;
5378
5379 case 460:
5380 #line 2414 "util/configparser.y"
5494 #line 5496 "util/configparser.c"
5495 break;
5496
5497 case 469:
5498 #line 2459 "util/configparser.y"
53815499 {
53825500 OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
53835501 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
53865504 (strcmp((yyvsp[0].str), "yes")==0);
53875505 free((yyvsp[0].str));
53885506 }
5389 #line 5391 "util/configparser.c"
5390 break;
5391
5392 case 461:
5393 #line 2424 "util/configparser.y"
5507 #line 5509 "util/configparser.c"
5508 break;
5509
5510 case 470:
5511 #line 2469 "util/configparser.y"
53945512 {
53955513 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
53965514 if(cfg_parser->cfg->forwards->name)
53995517 free(cfg_parser->cfg->forwards->name);
54005518 cfg_parser->cfg->forwards->name = (yyvsp[0].str);
54015519 }
5402 #line 5404 "util/configparser.c"
5403 break;
5404
5405 case 462:
5406 #line 2434 "util/configparser.y"
5520 #line 5522 "util/configparser.c"
5521 break;
5522
5523 case 471:
5524 #line 2479 "util/configparser.y"
54075525 {
54085526 OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
54095527 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
54105528 yyerror("out of memory");
54115529 }
5412 #line 5414 "util/configparser.c"
5413 break;
5414
5415 case 463:
5416 #line 2441 "util/configparser.y"
5530 #line 5532 "util/configparser.c"
5531 break;
5532
5533 case 472:
5534 #line 2486 "util/configparser.y"
54175535 {
54185536 OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
54195537 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
54205538 yyerror("out of memory");
54215539 }
5422 #line 5424 "util/configparser.c"
5423 break;
5424
5425 case 464:
5426 #line 2448 "util/configparser.y"
5540 #line 5542 "util/configparser.c"
5541 break;
5542
5543 case 473:
5544 #line 2493 "util/configparser.y"
54275545 {
54285546 OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
54295547 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
54315549 else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
54325550 free((yyvsp[0].str));
54335551 }
5434 #line 5436 "util/configparser.c"
5435 break;
5436
5437 case 465:
5438 #line 2457 "util/configparser.y"
5552 #line 5554 "util/configparser.c"
5553 break;
5554
5555 case 474:
5556 #line 2502 "util/configparser.y"
54395557 {
54405558 OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
54415559 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
54435561 else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
54445562 free((yyvsp[0].str));
54455563 }
5446 #line 5448 "util/configparser.c"
5447 break;
5448
5449 case 466:
5450 #line 2466 "util/configparser.y"
5564 #line 5566 "util/configparser.c"
5565 break;
5566
5567 case 475:
5568 #line 2511 "util/configparser.y"
54515569 {
54525570 OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
54535571 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
54565574 (strcmp((yyvsp[0].str), "yes")==0);
54575575 free((yyvsp[0].str));
54585576 }
5459 #line 5461 "util/configparser.c"
5460 break;
5461
5462 case 467:
5463 #line 2476 "util/configparser.y"
5577 #line 5579 "util/configparser.c"
5578 break;
5579
5580 case 476:
5581 #line 2521 "util/configparser.y"
54645582 {
54655583 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
54665584 if(cfg_parser->cfg->auths->name)
54695587 free(cfg_parser->cfg->auths->name);
54705588 cfg_parser->cfg->auths->name = (yyvsp[0].str);
54715589 }
5472 #line 5474 "util/configparser.c"
5473 break;
5474
5475 case 468:
5476 #line 2486 "util/configparser.y"
5590 #line 5592 "util/configparser.c"
5591 break;
5592
5593 case 477:
5594 #line 2531 "util/configparser.y"
54775595 {
54785596 OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
54795597 free(cfg_parser->cfg->auths->zonefile);
54805598 cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
54815599 }
5482 #line 5484 "util/configparser.c"
5483 break;
5484
5485 case 469:
5486 #line 2493 "util/configparser.y"
5600 #line 5602 "util/configparser.c"
5601 break;
5602
5603 case 478:
5604 #line 2538 "util/configparser.y"
54875605 {
54885606 OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
54895607 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
54905608 yyerror("out of memory");
54915609 }
5492 #line 5494 "util/configparser.c"
5493 break;
5494
5495 case 470:
5496 #line 2500 "util/configparser.y"
5610 #line 5612 "util/configparser.c"
5611 break;
5612
5613 case 479:
5614 #line 2545 "util/configparser.y"
54975615 {
54985616 OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
54995617 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
55005618 yyerror("out of memory");
55015619 }
5502 #line 5504 "util/configparser.c"
5503 break;
5504
5505 case 471:
5506 #line 2507 "util/configparser.y"
5620 #line 5622 "util/configparser.c"
5621 break;
5622
5623 case 480:
5624 #line 2552 "util/configparser.y"
55075625 {
55085626 OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
55095627 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
55105628 (yyvsp[0].str)))
55115629 yyerror("out of memory");
55125630 }
5513 #line 5515 "util/configparser.c"
5514 break;
5515
5516 case 472:
5517 #line 2515 "util/configparser.y"
5631 #line 5633 "util/configparser.c"
5632 break;
5633
5634 case 481:
5635 #line 2560 "util/configparser.y"
55185636 {
55195637 OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
55205638 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
55235641 (strcmp((yyvsp[0].str), "yes")==0);
55245642 free((yyvsp[0].str));
55255643 }
5526 #line 5528 "util/configparser.c"
5527 break;
5528
5529 case 473:
5530 #line 2525 "util/configparser.y"
5644 #line 5646 "util/configparser.c"
5645 break;
5646
5647 case 482:
5648 #line 2570 "util/configparser.y"
55315649 {
55325650 OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
55335651 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
55365654 (strcmp((yyvsp[0].str), "yes")==0);
55375655 free((yyvsp[0].str));
55385656 }
5539 #line 5541 "util/configparser.c"
5540 break;
5541
5542 case 474:
5543 #line 2535 "util/configparser.y"
5657 #line 5659 "util/configparser.c"
5658 break;
5659
5660 case 483:
5661 #line 2580 "util/configparser.y"
55445662 {
55455663 OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
55465664 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
55495667 (strcmp((yyvsp[0].str), "yes")==0);
55505668 free((yyvsp[0].str));
55515669 }
5552 #line 5554 "util/configparser.c"
5553 break;
5554
5555 case 475:
5556 #line 2545 "util/configparser.y"
5670 #line 5672 "util/configparser.c"
5671 break;
5672
5673 case 484:
5674 #line 2590 "util/configparser.y"
55575675 {
55585676 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
55595677 if(cfg_parser->cfg->views->name)
55625680 free(cfg_parser->cfg->views->name);
55635681 cfg_parser->cfg->views->name = (yyvsp[0].str);
55645682 }
5565 #line 5567 "util/configparser.c"
5566 break;
5567
5568 case 476:
5569 #line 2555 "util/configparser.y"
5683 #line 5685 "util/configparser.c"
5684 break;
5685
5686 case 485:
5687 #line 2600 "util/configparser.y"
55705688 {
55715689 OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
55725690 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
56045722 fatal_exit("out of memory adding local-zone");
56055723 }
56065724 }
5607 #line 5609 "util/configparser.c"
5608 break;
5609
5610 case 477:
5611 #line 2594 "util/configparser.y"
5725 #line 5727 "util/configparser.c"
5726 break;
5727
5728 case 486:
5729 #line 2639 "util/configparser.y"
56125730 {
56135731 OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
56145732 validate_respip_action((yyvsp[0].str));
56175735 fatal_exit("out of memory adding per-view "
56185736 "response-ip action");
56195737 }
5620 #line 5622 "util/configparser.c"
5621 break;
5622
5623 case 478:
5624 #line 2604 "util/configparser.y"
5738 #line 5740 "util/configparser.c"
5739 break;
5740
5741 case 487:
5742 #line 2649 "util/configparser.y"
56255743 {
56265744 OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
56275745 if(!cfg_str2list_insert(
56285746 &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
56295747 fatal_exit("out of memory adding response-ip-data");
56305748 }
5631 #line 5633 "util/configparser.c"
5632 break;
5633
5634 case 479:
5635 #line 2612 "util/configparser.y"
5749 #line 5751 "util/configparser.c"
5750 break;
5751
5752 case 488:
5753 #line 2657 "util/configparser.y"
56365754 {
56375755 OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
56385756 if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
56395757 fatal_exit("out of memory adding local-data");
56405758 }
56415759 }
5642 #line 5644 "util/configparser.c"
5643 break;
5644
5645 case 480:
5646 #line 2620 "util/configparser.y"
5760 #line 5762 "util/configparser.c"
5761 break;
5762
5763 case 489:
5764 #line 2665 "util/configparser.y"
56475765 {
56485766 char* ptr;
56495767 OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
56575775 yyerror("local-data-ptr could not be reversed");
56585776 }
56595777 }
5660 #line 5662 "util/configparser.c"
5661 break;
5662
5663 case 481:
5664 #line 2635 "util/configparser.y"
5778 #line 5780 "util/configparser.c"
5779 break;
5780
5781 case 490:
5782 #line 2680 "util/configparser.y"
56655783 {
56665784 OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
56675785 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56695787 else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
56705788 free((yyvsp[0].str));
56715789 }
5672 #line 5674 "util/configparser.c"
5673 break;
5674
5675 case 482:
5676 #line 2644 "util/configparser.y"
5790 #line 5792 "util/configparser.c"
5791 break;
5792
5793 case 491:
5794 #line 2689 "util/configparser.y"
56775795 {
56785796 OUTYY(("\nP(remote-control:)\n"));
56795797 }
5680 #line 5682 "util/configparser.c"
5681 break;
5682
5683 case 493:
5684 #line 2655 "util/configparser.y"
5798 #line 5800 "util/configparser.c"
5799 break;
5800
5801 case 502:
5802 #line 2700 "util/configparser.y"
56855803 {
56865804 OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
56875805 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
56905808 (strcmp((yyvsp[0].str), "yes")==0);
56915809 free((yyvsp[0].str));
56925810 }
5693 #line 5695 "util/configparser.c"
5694 break;
5695
5696 case 494:
5697 #line 2665 "util/configparser.y"
5811 #line 5813 "util/configparser.c"
5812 break;
5813
5814 case 503:
5815 #line 2710 "util/configparser.y"
56985816 {
56995817 OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
57005818 if(atoi((yyvsp[0].str)) == 0)
57025820 else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
57035821 free((yyvsp[0].str));
57045822 }
5705 #line 5707 "util/configparser.c"
5706 break;
5707
5708 case 495:
5709 #line 2674 "util/configparser.y"
5823 #line 5825 "util/configparser.c"
5824 break;
5825
5826 case 504:
5827 #line 2719 "util/configparser.y"
57105828 {
57115829 OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
57125830 if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
57135831 yyerror("out of memory");
57145832 }
5715 #line 5717 "util/configparser.c"
5716 break;
5717
5718 case 496:
5719 #line 2681 "util/configparser.y"
5833 #line 5835 "util/configparser.c"
5834 break;
5835
5836 case 505:
5837 #line 2726 "util/configparser.y"
57205838 {
57215839 OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
57225840 cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
57235841 free((yyvsp[0].str));
57245842 }
5725 #line 5727 "util/configparser.c"
5726 break;
5727
5728 case 497:
5729 #line 2688 "util/configparser.y"
5843 #line 5845 "util/configparser.c"
5844 break;
5845
5846 case 506:
5847 #line 2733 "util/configparser.y"
57305848 {
57315849 OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
57325850 free(cfg_parser->cfg->server_key_file);
57335851 cfg_parser->cfg->server_key_file = (yyvsp[0].str);
57345852 }
5735 #line 5737 "util/configparser.c"
5736 break;
5737
5738 case 498:
5739 #line 2695 "util/configparser.y"
5853 #line 5855 "util/configparser.c"
5854 break;
5855
5856 case 507:
5857 #line 2740 "util/configparser.y"
57405858 {
57415859 OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
57425860 free(cfg_parser->cfg->server_cert_file);
57435861 cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
57445862 }
5745 #line 5747 "util/configparser.c"
5746 break;
5747
5748 case 499:
5749 #line 2702 "util/configparser.y"
5863 #line 5865 "util/configparser.c"
5864 break;
5865
5866 case 508:
5867 #line 2747 "util/configparser.y"
57505868 {
57515869 OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
57525870 free(cfg_parser->cfg->control_key_file);
57535871 cfg_parser->cfg->control_key_file = (yyvsp[0].str);
57545872 }
5755 #line 5757 "util/configparser.c"
5756 break;
5757
5758 case 500:
5759 #line 2709 "util/configparser.y"
5873 #line 5875 "util/configparser.c"
5874 break;
5875
5876 case 509:
5877 #line 2754 "util/configparser.y"
57605878 {
57615879 OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
57625880 free(cfg_parser->cfg->control_cert_file);
57635881 cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
57645882 }
5765 #line 5767 "util/configparser.c"
5766 break;
5767
5768 case 501:
5769 #line 2716 "util/configparser.y"
5883 #line 5885 "util/configparser.c"
5884 break;
5885
5886 case 510:
5887 #line 2761 "util/configparser.y"
57705888 {
57715889 OUTYY(("\nP(dnstap:)\n"));
57725890 }
5773 #line 5775 "util/configparser.c"
5774 break;
5775
5776 case 516:
5777 #line 2733 "util/configparser.y"
5891 #line 5893 "util/configparser.c"
5892 break;
5893
5894 case 532:
5895 #line 2781 "util/configparser.y"
57785896 {
57795897 OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
57805898 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
57825900 else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
57835901 free((yyvsp[0].str));
57845902 }
5785 #line 5787 "util/configparser.c"
5786 break;
5787
5788 case 517:
5789 #line 2742 "util/configparser.y"
5903 #line 5905 "util/configparser.c"
5904 break;
5905
5906 case 533:
5907 #line 2790 "util/configparser.y"
5908 {
5909 OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str)));
5910 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5911 yyerror("expected yes or no.");
5912 else cfg_parser->cfg->dnstap_bidirectional =
5913 (strcmp((yyvsp[0].str), "yes")==0);
5914 free((yyvsp[0].str));
5915 }
5916 #line 5918 "util/configparser.c"
5917 break;
5918
5919 case 534:
5920 #line 2800 "util/configparser.y"
57905921 {
57915922 OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
57925923 free(cfg_parser->cfg->dnstap_socket_path);
57935924 cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
57945925 }
5795 #line 5797 "util/configparser.c"
5796 break;
5797
5798 case 518:
5799 #line 2749 "util/configparser.y"
5926 #line 5928 "util/configparser.c"
5927 break;
5928
5929 case 535:
5930 #line 2807 "util/configparser.y"
5931 {
5932 OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str)));
5933 free(cfg_parser->cfg->dnstap_ip);
5934 cfg_parser->cfg->dnstap_ip = (yyvsp[0].str);
5935 }
5936 #line 5938 "util/configparser.c"
5937 break;
5938
5939 case 536:
5940 #line 2814 "util/configparser.y"
5941 {
5942 OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str)));
5943 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5944 yyerror("expected yes or no.");
5945 else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
5946 free((yyvsp[0].str));
5947 }
5948 #line 5950 "util/configparser.c"
5949 break;
5950
5951 case 537:
5952 #line 2823 "util/configparser.y"
5953 {
5954 OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str)));
5955 free(cfg_parser->cfg->dnstap_tls_server_name);
5956 cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str);
5957 }
5958 #line 5960 "util/configparser.c"
5959 break;
5960
5961 case 538:
5962 #line 2830 "util/configparser.y"
5963 {
5964 OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
5965 free(cfg_parser->cfg->dnstap_tls_cert_bundle);
5966 cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str);
5967 }
5968 #line 5970 "util/configparser.c"
5969 break;
5970
5971 case 539:
5972 #line 2837 "util/configparser.y"
5973 {
5974 OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str)));
5975 free(cfg_parser->cfg->dnstap_tls_client_key_file);
5976 cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str);
5977 }
5978 #line 5980 "util/configparser.c"
5979 break;
5980
5981 case 540:
5982 #line 2844 "util/configparser.y"
5983 {
5984 OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str)));
5985 free(cfg_parser->cfg->dnstap_tls_client_cert_file);
5986 cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str);
5987 }
5988 #line 5990 "util/configparser.c"
5989 break;
5990
5991 case 541:
5992 #line 2851 "util/configparser.y"
58005993 {
58015994 OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
58025995 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
58045997 else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
58055998 free((yyvsp[0].str));
58065999 }
5807 #line 5809 "util/configparser.c"
5808 break;
5809
5810 case 519:
5811 #line 2758 "util/configparser.y"
6000 #line 6002 "util/configparser.c"
6001 break;
6002
6003 case 542:
6004 #line 2860 "util/configparser.y"
58126005 {
58136006 OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
58146007 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
58166009 else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
58176010 free((yyvsp[0].str));
58186011 }
5819 #line 5821 "util/configparser.c"
5820 break;
5821
5822 case 520:
5823 #line 2767 "util/configparser.y"
6012 #line 6014 "util/configparser.c"
6013 break;
6014
6015 case 543:
6016 #line 2869 "util/configparser.y"
58246017 {
58256018 OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
58266019 free(cfg_parser->cfg->dnstap_identity);
58276020 cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
58286021 }
5829 #line 5831 "util/configparser.c"
5830 break;
5831
5832 case 521:
5833 #line 2774 "util/configparser.y"
6022 #line 6024 "util/configparser.c"
6023 break;
6024
6025 case 544:
6026 #line 2876 "util/configparser.y"
58346027 {
58356028 OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
58366029 free(cfg_parser->cfg->dnstap_version);
58376030 cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
58386031 }
5839 #line 5841 "util/configparser.c"
5840 break;
5841
5842 case 522:
5843 #line 2781 "util/configparser.y"
6032 #line 6034 "util/configparser.c"
6033 break;
6034
6035 case 545:
6036 #line 2883 "util/configparser.y"
58446037 {
58456038 OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
58466039 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
58496042 (strcmp((yyvsp[0].str), "yes")==0);
58506043 free((yyvsp[0].str));
58516044 }
5852 #line 5854 "util/configparser.c"
5853 break;
5854
5855 case 523:
5856 #line 2791 "util/configparser.y"
6045 #line 6047 "util/configparser.c"
6046 break;
6047
6048 case 546:
6049 #line 2893 "util/configparser.y"
58576050 {
58586051 OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
58596052 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
58626055 (strcmp((yyvsp[0].str), "yes")==0);
58636056 free((yyvsp[0].str));
58646057 }
5865 #line 5867 "util/configparser.c"
5866 break;
5867
5868 case 524:
5869 #line 2801 "util/configparser.y"
6058 #line 6060 "util/configparser.c"
6059 break;
6060
6061 case 547:
6062 #line 2903 "util/configparser.y"
58706063 {
58716064 OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
58726065 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
58756068 (strcmp((yyvsp[0].str), "yes")==0);
58766069 free((yyvsp[0].str));
58776070 }
5878 #line 5880 "util/configparser.c"
5879 break;
5880
5881 case 525:
5882 #line 2811 "util/configparser.y"
6071 #line 6073 "util/configparser.c"
6072 break;
6073
6074 case 548:
6075 #line 2913 "util/configparser.y"
58836076 {
58846077 OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
58856078 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
58886081 (strcmp((yyvsp[0].str), "yes")==0);
58896082 free((yyvsp[0].str));
58906083 }
5891 #line 5893 "util/configparser.c"
5892 break;
5893
5894 case 526:
5895 #line 2821 "util/configparser.y"
6084 #line 6086 "util/configparser.c"
6085 break;
6086
6087 case 549:
6088 #line 2923 "util/configparser.y"
58966089 {
58976090 OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
58986091 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
59016094 (strcmp((yyvsp[0].str), "yes")==0);
59026095 free((yyvsp[0].str));
59036096 }
5904 #line 5906 "util/configparser.c"
5905 break;
5906
5907 case 527:
5908 #line 2831 "util/configparser.y"
6097 #line 6099 "util/configparser.c"
6098 break;
6099
6100 case 550:
6101 #line 2933 "util/configparser.y"
59096102 {
59106103 OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
59116104 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
59146107 (strcmp((yyvsp[0].str), "yes")==0);
59156108 free((yyvsp[0].str));
59166109 }
5917 #line 5919 "util/configparser.c"
5918 break;
5919
5920 case 528:
5921 #line 2841 "util/configparser.y"
6110 #line 6112 "util/configparser.c"
6111 break;
6112
6113 case 551:
6114 #line 2943 "util/configparser.y"
59226115 {
59236116 OUTYY(("\nP(python:)\n"));
59246117 }
5925 #line 5927 "util/configparser.c"
5926 break;
5927
5928 case 532:
5929 #line 2850 "util/configparser.y"
6118 #line 6120 "util/configparser.c"
6119 break;
6120
6121 case 555:
6122 #line 2952 "util/configparser.y"
59306123 {
59316124 OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
59326125 if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
59336126 yyerror("out of memory");
59346127 }
5935 #line 5937 "util/configparser.c"
5936 break;
5937
5938 case 533:
5939 #line 2856 "util/configparser.y"
6128 #line 6130 "util/configparser.c"
6129 break;
6130
6131 case 556:
6132 #line 2958 "util/configparser.y"
6133 {
6134 OUTYY(("\nP(dynlib:)\n"));
6135 }
6136 #line 6138 "util/configparser.c"
6137 break;
6138
6139 case 560:
6140 #line 2967 "util/configparser.y"
6141 {
6142 OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str)));
6143 if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str)))
6144 yyerror("out of memory");
6145 }
6146 #line 6148 "util/configparser.c"
6147 break;
6148
6149 case 561:
6150 #line 2973 "util/configparser.y"
59406151 {
59416152 OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
59426153 if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
59456156 (strcmp((yyvsp[0].str), "yes")==0);
59466157 free((yyvsp[0].str));
59476158 }
5948 #line 5950 "util/configparser.c"
5949 break;
5950
5951 case 534:
5952 #line 2866 "util/configparser.y"
6159 #line 6161 "util/configparser.c"
6160 break;
6161
6162 case 562:
6163 #line 2983 "util/configparser.y"
59536164 {
59546165 OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
59556166 free(cfg_parser->cfg->log_identity);
59566167 cfg_parser->cfg->log_identity = (yyvsp[0].str);
59576168 }
5958 #line 5960 "util/configparser.c"
5959 break;
5960
5961 case 535:
5962 #line 2873 "util/configparser.y"
6169 #line 6171 "util/configparser.c"
6170 break;
6171
6172 case 563:
6173 #line 2990 "util/configparser.y"
59636174 {
59646175 OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
59656176 validate_respip_action((yyvsp[0].str));
59676178 (yyvsp[-1].str), (yyvsp[0].str)))
59686179 fatal_exit("out of memory adding response-ip");
59696180 }
5970 #line 5972 "util/configparser.c"
5971 break;
5972
5973 case 536:
5974 #line 2882 "util/configparser.y"
6181 #line 6183 "util/configparser.c"
6182 break;
6183
6184 case 564:
6185 #line 2999 "util/configparser.y"
59756186 {
59766187 OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
59776188 if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
59786189 (yyvsp[-1].str), (yyvsp[0].str)))
59796190 fatal_exit("out of memory adding response-ip-data");
59806191 }
5981 #line 5983 "util/configparser.c"
5982 break;
5983
5984 case 537:
5985 #line 2890 "util/configparser.y"
6192 #line 6194 "util/configparser.c"
6193 break;
6194
6195 case 565:
6196 #line 3007 "util/configparser.y"
59866197 {
59876198 OUTYY(("\nP(dnscrypt:)\n"));
59886199 }
5989 #line 5991 "util/configparser.c"
5990 break;
5991
5992 case 550:
5993 #line 2906 "util/configparser.y"
6200 #line 6202 "util/configparser.c"
6201 break;
6202
6203 case 578:
6204 #line 3023 "util/configparser.y"
59946205 {
59956206 OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
59966207 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
59986209 else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
59996210 free((yyvsp[0].str));
60006211 }
6001 #line 6003 "util/configparser.c"
6002 break;
6003
6004 case 551:
6005 #line 2916 "util/configparser.y"
6212 #line 6214 "util/configparser.c"
6213 break;
6214
6215 case 579:
6216 #line 3033 "util/configparser.y"
60066217 {
60076218 OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
60086219 if(atoi((yyvsp[0].str)) == 0)
60106221 else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
60116222 free((yyvsp[0].str));
60126223 }
6013 #line 6015 "util/configparser.c"
6014 break;
6015
6016 case 552:
6017 #line 2925 "util/configparser.y"
6224 #line 6226 "util/configparser.c"
6225 break;
6226
6227 case 580:
6228 #line 3042 "util/configparser.y"
60186229 {
60196230 OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
60206231 free(cfg_parser->cfg->dnscrypt_provider);
60216232 cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
60226233 }
6023 #line 6025 "util/configparser.c"
6024 break;
6025
6026 case 553:
6027 #line 2932 "util/configparser.y"
6234 #line 6236 "util/configparser.c"
6235 break;
6236
6237 case 581:
6238 #line 3049 "util/configparser.y"
60286239 {
60296240 OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
60306241 if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
60326243 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
60336244 fatal_exit("out of memory adding dnscrypt-provider-cert");
60346245 }
6035 #line 6037 "util/configparser.c"
6036 break;
6037
6038 case 554:
6039 #line 2941 "util/configparser.y"
6246 #line 6248 "util/configparser.c"
6247 break;
6248
6249 case 582:
6250 #line 3058 "util/configparser.y"
60406251 {
60416252 OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
60426253 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
60436254 fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
60446255 }
6045 #line 6047 "util/configparser.c"
6046 break;
6047
6048 case 555:
6049 #line 2948 "util/configparser.y"
6256 #line 6258 "util/configparser.c"
6257 break;
6258
6259 case 583:
6260 #line 3065 "util/configparser.y"
60506261 {
60516262 OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
60526263 if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
60546265 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
60556266 fatal_exit("out of memory adding dnscrypt-secret-key");
60566267 }
6057 #line 6059 "util/configparser.c"
6058 break;
6059
6060 case 556:
6061 #line 2957 "util/configparser.y"
6268 #line 6270 "util/configparser.c"
6269 break;
6270
6271 case 584:
6272 #line 3074 "util/configparser.y"
60626273 {
60636274 OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
60646275 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
60656276 yyerror("memory size expected");
60666277 free((yyvsp[0].str));
60676278 }
6068 #line 6070 "util/configparser.c"
6069 break;
6070
6071 case 557:
6072 #line 2965 "util/configparser.y"
6279 #line 6281 "util/configparser.c"
6280 break;
6281
6282 case 585:
6283 #line 3082 "util/configparser.y"
60736284 {
60746285 OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
60756286 if(atoi((yyvsp[0].str)) == 0)
60816292 }
60826293 free((yyvsp[0].str));
60836294 }
6084 #line 6086 "util/configparser.c"
6085 break;
6086
6087 case 558:
6088 #line 2978 "util/configparser.y"
6295 #line 6297 "util/configparser.c"
6296 break;
6297
6298 case 586:
6299 #line 3095 "util/configparser.y"
60896300 {
60906301 OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
60916302 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
60926303 yyerror("memory size expected");
60936304 free((yyvsp[0].str));
60946305 }
6095 #line 6097 "util/configparser.c"
6096 break;
6097
6098 case 559:
6099 #line 2986 "util/configparser.y"
6306 #line 6308 "util/configparser.c"
6307 break;
6308
6309 case 587:
6310 #line 3103 "util/configparser.y"
61006311 {
61016312 OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
61026313 if(atoi((yyvsp[0].str)) == 0)
61086319 }
61096320 free((yyvsp[0].str));
61106321 }
6111 #line 6113 "util/configparser.c"
6112 break;
6113
6114 case 560:
6115 #line 2999 "util/configparser.y"
6322 #line 6324 "util/configparser.c"
6323 break;
6324
6325 case 588:
6326 #line 3116 "util/configparser.y"
61166327 {
61176328 OUTYY(("\nP(cachedb:)\n"));
61186329 }
6119 #line 6121 "util/configparser.c"
6120 break;
6121
6122 case 568:
6123 #line 3009 "util/configparser.y"
6330 #line 6332 "util/configparser.c"
6331 break;
6332
6333 case 597:
6334 #line 3127 "util/configparser.y"
61246335 {
61256336 #ifdef USE_CACHEDB
61266337 OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
61316342 free((yyvsp[0].str));
61326343 #endif
61336344 }
6134 #line 6136 "util/configparser.c"
6135 break;
6136
6137 case 569:
6138 #line 3021 "util/configparser.y"
6345 #line 6347 "util/configparser.c"
6346 break;
6347
6348 case 598:
6349 #line 3139 "util/configparser.y"
61396350 {
61406351 #ifdef USE_CACHEDB
61416352 OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
61466357 free((yyvsp[0].str));
61476358 #endif
61486359 }
6149 #line 6151 "util/configparser.c"
6150 break;
6151
6152 case 570:
6153 #line 3033 "util/configparser.y"
6360 #line 6362 "util/configparser.c"
6361 break;
6362
6363 case 599:
6364 #line 3151 "util/configparser.y"
61546365 {
61556366 #if defined(USE_CACHEDB) && defined(USE_REDIS)
61566367 OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
61616372 free((yyvsp[0].str));
61626373 #endif
61636374 }
6164 #line 6166 "util/configparser.c"
6165 break;
6166
6167 case 571:
6168 #line 3045 "util/configparser.y"
6375 #line 6377 "util/configparser.c"
6376 break;
6377
6378 case 600:
6379 #line 3163 "util/configparser.y"
61696380 {
61706381 #if defined(USE_CACHEDB) && defined(USE_REDIS)
61716382 int port;
61796390 #endif
61806391 free((yyvsp[0].str));
61816392 }
6182 #line 6184 "util/configparser.c"
6183 break;
6184
6185 case 572:
6186 #line 3060 "util/configparser.y"
6393 #line 6395 "util/configparser.c"
6394 break;
6395
6396 case 601:
6397 #line 3178 "util/configparser.y"
61876398 {
61886399 #if defined(USE_CACHEDB) && defined(USE_REDIS)
61896400 OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
61956406 #endif
61966407 free((yyvsp[0].str));
61976408 }
6198 #line 6200 "util/configparser.c"
6199 break;
6200
6201 case 573:
6202 #line 3073 "util/configparser.y"
6409 #line 6411 "util/configparser.c"
6410 break;
6411
6412 case 602:
6413 #line 3191 "util/configparser.y"
6414 {
6415 #if defined(USE_CACHEDB) && defined(USE_REDIS)
6416 OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
6417 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6418 yyerror("expected yes or no.");
6419 else cfg_parser->cfg->redis_expire_records = (strcmp((yyvsp[0].str), "yes")==0);
6420 #else
6421 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
6422 #endif
6423 free((yyvsp[0].str));
6424 }
6425 #line 6427 "util/configparser.c"
6426 break;
6427
6428 case 603:
6429 #line 3204 "util/configparser.y"
62036430 {
62046431 OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
62056432 if (atoi((yyvsp[0].str)) < 0)
62096436 fatal_exit("out of memory adding tcp connection limit");
62106437 }
62116438 }
6212 #line 6214 "util/configparser.c"
6213 break;
6214
6215 case 574:
6216 #line 3084 "util/configparser.y"
6439 #line 6441 "util/configparser.c"
6440 break;
6441
6442 case 604:
6443 #line 3215 "util/configparser.y"
62176444 {
62186445 OUTYY(("\nP(ipset:)\n"));
62196446 }
6220 #line 6222 "util/configparser.c"
6221 break;
6222
6223 case 579:
6224 #line 3093 "util/configparser.y"
6447 #line 6449 "util/configparser.c"
6448 break;
6449
6450 case 609:
6451 #line 3224 "util/configparser.y"
62256452 {
62266453 #ifdef USE_IPSET
62276454 OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
62356462 free((yyvsp[0].str));
62366463 #endif
62376464 }
6238 #line 6240 "util/configparser.c"
6239 break;
6240
6241 case 580:
6242 #line 3108 "util/configparser.y"
6465 #line 6467 "util/configparser.c"
6466 break;
6467
6468 case 610:
6469 #line 3239 "util/configparser.y"
62436470 {
62446471 #ifdef USE_IPSET
62456472 OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
62536480 free((yyvsp[0].str));
62546481 #endif
62556482 }
6256 #line 6258 "util/configparser.c"
6257 break;
6258
6259
6260 #line 6262 "util/configparser.c"
6483 #line 6485 "util/configparser.c"
6484 break;
6485
6486
6487 #line 6489 "util/configparser.c"
62616488
62626489 default: break;
62636490 }
64896716 #endif
64906717 return yyresult;
64916718 }
6492 #line 3122 "util/configparser.y"
6719 #line 3253 "util/configparser.y"
64936720
64946721
64956722 /* parse helper routines could be here */
5656 ANY = 263,
5757 ZONESTR = 264,
5858 STRING_ARG = 265,
59 VAR_SERVER = 266,
60 VAR_VERBOSITY = 267,
61 VAR_NUM_THREADS = 268,
62 VAR_PORT = 269,
63 VAR_OUTGOING_RANGE = 270,
64 VAR_INTERFACE = 271,
65 VAR_DO_IP4 = 272,
66 VAR_DO_IP6 = 273,
67 VAR_PREFER_IP6 = 274,
68 VAR_DO_UDP = 275,
69 VAR_DO_TCP = 276,
70 VAR_TCP_MSS = 277,
71 VAR_OUTGOING_TCP_MSS = 278,
72 VAR_TCP_IDLE_TIMEOUT = 279,
73 VAR_EDNS_TCP_KEEPALIVE = 280,
74 VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 281,
75 VAR_CHROOT = 282,
76 VAR_USERNAME = 283,
77 VAR_DIRECTORY = 284,
78 VAR_LOGFILE = 285,
79 VAR_PIDFILE = 286,
80 VAR_MSG_CACHE_SIZE = 287,
81 VAR_MSG_CACHE_SLABS = 288,
82 VAR_NUM_QUERIES_PER_THREAD = 289,
83 VAR_RRSET_CACHE_SIZE = 290,
84 VAR_RRSET_CACHE_SLABS = 291,
85 VAR_OUTGOING_NUM_TCP = 292,
86 VAR_INFRA_HOST_TTL = 293,
87 VAR_INFRA_LAME_TTL = 294,
88 VAR_INFRA_CACHE_SLABS = 295,
89 VAR_INFRA_CACHE_NUMHOSTS = 296,
90 VAR_INFRA_CACHE_LAME_SIZE = 297,
91 VAR_NAME = 298,
92 VAR_STUB_ZONE = 299,
93 VAR_STUB_HOST = 300,
94 VAR_STUB_ADDR = 301,
95 VAR_TARGET_FETCH_POLICY = 302,
96 VAR_HARDEN_SHORT_BUFSIZE = 303,
97 VAR_HARDEN_LARGE_QUERIES = 304,
98 VAR_FORWARD_ZONE = 305,
99 VAR_FORWARD_HOST = 306,
100 VAR_FORWARD_ADDR = 307,
101 VAR_DO_NOT_QUERY_ADDRESS = 308,
102 VAR_HIDE_IDENTITY = 309,
103 VAR_HIDE_VERSION = 310,
104 VAR_IDENTITY = 311,
105 VAR_VERSION = 312,
106 VAR_HARDEN_GLUE = 313,
107 VAR_MODULE_CONF = 314,
108 VAR_TRUST_ANCHOR_FILE = 315,
109 VAR_TRUST_ANCHOR = 316,
110 VAR_VAL_OVERRIDE_DATE = 317,
111 VAR_BOGUS_TTL = 318,
112 VAR_VAL_CLEAN_ADDITIONAL = 319,
113 VAR_VAL_PERMISSIVE_MODE = 320,
114 VAR_INCOMING_NUM_TCP = 321,
115 VAR_MSG_BUFFER_SIZE = 322,
116 VAR_KEY_CACHE_SIZE = 323,
117 VAR_KEY_CACHE_SLABS = 324,
118 VAR_TRUSTED_KEYS_FILE = 325,
119 VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 326,
120 VAR_USE_SYSLOG = 327,
121 VAR_OUTGOING_INTERFACE = 328,
122 VAR_ROOT_HINTS = 329,
123 VAR_DO_NOT_QUERY_LOCALHOST = 330,
124 VAR_CACHE_MAX_TTL = 331,
125 VAR_HARDEN_DNSSEC_STRIPPED = 332,
126 VAR_ACCESS_CONTROL = 333,
127 VAR_LOCAL_ZONE = 334,
128 VAR_LOCAL_DATA = 335,
129 VAR_INTERFACE_AUTOMATIC = 336,
130 VAR_STATISTICS_INTERVAL = 337,
131 VAR_DO_DAEMONIZE = 338,
132 VAR_USE_CAPS_FOR_ID = 339,
133 VAR_STATISTICS_CUMULATIVE = 340,
134 VAR_OUTGOING_PORT_PERMIT = 341,
135 VAR_OUTGOING_PORT_AVOID = 342,
136 VAR_DLV_ANCHOR_FILE = 343,
137 VAR_DLV_ANCHOR = 344,
138 VAR_NEG_CACHE_SIZE = 345,
139 VAR_HARDEN_REFERRAL_PATH = 346,
140 VAR_PRIVATE_ADDRESS = 347,
141 VAR_PRIVATE_DOMAIN = 348,
142 VAR_REMOTE_CONTROL = 349,
143 VAR_CONTROL_ENABLE = 350,
144 VAR_CONTROL_INTERFACE = 351,
145 VAR_CONTROL_PORT = 352,
146 VAR_SERVER_KEY_FILE = 353,
147 VAR_SERVER_CERT_FILE = 354,
148 VAR_CONTROL_KEY_FILE = 355,
149 VAR_CONTROL_CERT_FILE = 356,
150 VAR_CONTROL_USE_CERT = 357,
151 VAR_EXTENDED_STATISTICS = 358,
152 VAR_LOCAL_DATA_PTR = 359,
153 VAR_JOSTLE_TIMEOUT = 360,
154 VAR_STUB_PRIME = 361,
155 VAR_UNWANTED_REPLY_THRESHOLD = 362,
156 VAR_LOG_TIME_ASCII = 363,
157 VAR_DOMAIN_INSECURE = 364,
158 VAR_PYTHON = 365,
159 VAR_PYTHON_SCRIPT = 366,
160 VAR_VAL_SIG_SKEW_MIN = 367,
161 VAR_VAL_SIG_SKEW_MAX = 368,
162 VAR_CACHE_MIN_TTL = 369,
163 VAR_VAL_LOG_LEVEL = 370,
164 VAR_AUTO_TRUST_ANCHOR_FILE = 371,
165 VAR_KEEP_MISSING = 372,
166 VAR_ADD_HOLDDOWN = 373,
167 VAR_DEL_HOLDDOWN = 374,
168 VAR_SO_RCVBUF = 375,
169 VAR_EDNS_BUFFER_SIZE = 376,
170 VAR_PREFETCH = 377,
171 VAR_PREFETCH_KEY = 378,
172 VAR_SO_SNDBUF = 379,
173 VAR_SO_REUSEPORT = 380,
174 VAR_HARDEN_BELOW_NXDOMAIN = 381,
175 VAR_IGNORE_CD_FLAG = 382,
176 VAR_LOG_QUERIES = 383,
177 VAR_LOG_REPLIES = 384,
178 VAR_LOG_LOCAL_ACTIONS = 385,
179 VAR_TCP_UPSTREAM = 386,
180 VAR_SSL_UPSTREAM = 387,
181 VAR_SSL_SERVICE_KEY = 388,
182 VAR_SSL_SERVICE_PEM = 389,
183 VAR_SSL_PORT = 390,
184 VAR_FORWARD_FIRST = 391,
185 VAR_STUB_SSL_UPSTREAM = 392,
186 VAR_FORWARD_SSL_UPSTREAM = 393,
187 VAR_TLS_CERT_BUNDLE = 394,
188 VAR_STUB_FIRST = 395,
189 VAR_MINIMAL_RESPONSES = 396,
190 VAR_RRSET_ROUNDROBIN = 397,
191 VAR_MAX_UDP_SIZE = 398,
192 VAR_DELAY_CLOSE = 399,
193 VAR_UNBLOCK_LAN_ZONES = 400,
194 VAR_INSECURE_LAN_ZONES = 401,
195 VAR_INFRA_CACHE_MIN_RTT = 402,
196 VAR_DNS64_PREFIX = 403,
197 VAR_DNS64_SYNTHALL = 404,
198 VAR_DNS64_IGNORE_AAAA = 405,
199 VAR_DNSTAP = 406,
200 VAR_DNSTAP_ENABLE = 407,
201 VAR_DNSTAP_SOCKET_PATH = 408,
202 VAR_DNSTAP_SEND_IDENTITY = 409,
203 VAR_DNSTAP_SEND_VERSION = 410,
204 VAR_DNSTAP_IDENTITY = 411,
205 VAR_DNSTAP_VERSION = 412,
206 VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 413,
207 VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 414,
208 VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 415,
209 VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 416,
210 VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 417,
211 VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 418,
212 VAR_RESPONSE_IP_TAG = 419,
213 VAR_RESPONSE_IP = 420,
214 VAR_RESPONSE_IP_DATA = 421,
215 VAR_HARDEN_ALGO_DOWNGRADE = 422,
216 VAR_IP_TRANSPARENT = 423,
217 VAR_DISABLE_DNSSEC_LAME_CHECK = 424,
218 VAR_IP_RATELIMIT = 425,
219 VAR_IP_RATELIMIT_SLABS = 426,
220 VAR_IP_RATELIMIT_SIZE = 427,
221 VAR_RATELIMIT = 428,
222 VAR_RATELIMIT_SLABS = 429,
223 VAR_RATELIMIT_SIZE = 430,
224 VAR_RATELIMIT_FOR_DOMAIN = 431,
225 VAR_RATELIMIT_BELOW_DOMAIN = 432,
226 VAR_IP_RATELIMIT_FACTOR = 433,
227 VAR_RATELIMIT_FACTOR = 434,
228 VAR_SEND_CLIENT_SUBNET = 435,
229 VAR_CLIENT_SUBNET_ZONE = 436,
230 VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 437,
231 VAR_CLIENT_SUBNET_OPCODE = 438,
232 VAR_MAX_CLIENT_SUBNET_IPV4 = 439,
233 VAR_MAX_CLIENT_SUBNET_IPV6 = 440,
234 VAR_MIN_CLIENT_SUBNET_IPV4 = 441,
235 VAR_MIN_CLIENT_SUBNET_IPV6 = 442,
236 VAR_MAX_ECS_TREE_SIZE_IPV4 = 443,
237 VAR_MAX_ECS_TREE_SIZE_IPV6 = 444,
238 VAR_CAPS_WHITELIST = 445,
239 VAR_CACHE_MAX_NEGATIVE_TTL = 446,
240 VAR_PERMIT_SMALL_HOLDDOWN = 447,
241 VAR_QNAME_MINIMISATION = 448,
242 VAR_QNAME_MINIMISATION_STRICT = 449,
243 VAR_IP_FREEBIND = 450,
244 VAR_DEFINE_TAG = 451,
245 VAR_LOCAL_ZONE_TAG = 452,
246 VAR_ACCESS_CONTROL_TAG = 453,
247 VAR_LOCAL_ZONE_OVERRIDE = 454,
248 VAR_ACCESS_CONTROL_TAG_ACTION = 455,
249 VAR_ACCESS_CONTROL_TAG_DATA = 456,
250 VAR_VIEW = 457,
251 VAR_ACCESS_CONTROL_VIEW = 458,
252 VAR_VIEW_FIRST = 459,
253 VAR_SERVE_EXPIRED = 460,
254 VAR_SERVE_EXPIRED_TTL = 461,
255 VAR_SERVE_EXPIRED_TTL_RESET = 462,
256 VAR_SERVE_EXPIRED_REPLY_TTL = 463,
257 VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 464,
258 VAR_FAKE_DSA = 465,
259 VAR_FAKE_SHA1 = 466,
260 VAR_LOG_IDENTITY = 467,
261 VAR_HIDE_TRUSTANCHOR = 468,
262 VAR_TRUST_ANCHOR_SIGNALING = 469,
263 VAR_AGGRESSIVE_NSEC = 470,
264 VAR_USE_SYSTEMD = 471,
265 VAR_SHM_ENABLE = 472,
266 VAR_SHM_KEY = 473,
267 VAR_ROOT_KEY_SENTINEL = 474,
268 VAR_DNSCRYPT = 475,
269 VAR_DNSCRYPT_ENABLE = 476,
270 VAR_DNSCRYPT_PORT = 477,
271 VAR_DNSCRYPT_PROVIDER = 478,
272 VAR_DNSCRYPT_SECRET_KEY = 479,
273 VAR_DNSCRYPT_PROVIDER_CERT = 480,
274 VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 481,
275 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 482,
276 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 483,
277 VAR_DNSCRYPT_NONCE_CACHE_SIZE = 484,
278 VAR_DNSCRYPT_NONCE_CACHE_SLABS = 485,
279 VAR_IPSECMOD_ENABLED = 486,
280 VAR_IPSECMOD_HOOK = 487,
281 VAR_IPSECMOD_IGNORE_BOGUS = 488,
282 VAR_IPSECMOD_MAX_TTL = 489,
283 VAR_IPSECMOD_WHITELIST = 490,
284 VAR_IPSECMOD_STRICT = 491,
285 VAR_CACHEDB = 492,
286 VAR_CACHEDB_BACKEND = 493,
287 VAR_CACHEDB_SECRETSEED = 494,
288 VAR_CACHEDB_REDISHOST = 495,
289 VAR_CACHEDB_REDISPORT = 496,
290 VAR_CACHEDB_REDISTIMEOUT = 497,
291 VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 498,
292 VAR_FOR_UPSTREAM = 499,
293 VAR_AUTH_ZONE = 500,
294 VAR_ZONEFILE = 501,
295 VAR_MASTER = 502,
296 VAR_URL = 503,
297 VAR_FOR_DOWNSTREAM = 504,
298 VAR_FALLBACK_ENABLED = 505,
299 VAR_TLS_ADDITIONAL_PORT = 506,
300 VAR_LOW_RTT = 507,
301 VAR_LOW_RTT_PERMIL = 508,
302 VAR_FAST_SERVER_PERMIL = 509,
303 VAR_FAST_SERVER_NUM = 510,
304 VAR_ALLOW_NOTIFY = 511,
305 VAR_TLS_WIN_CERT = 512,
306 VAR_TCP_CONNECTION_LIMIT = 513,
307 VAR_FORWARD_NO_CACHE = 514,
308 VAR_STUB_NO_CACHE = 515,
309 VAR_LOG_SERVFAIL = 516,
310 VAR_DENY_ANY = 517,
311 VAR_UNKNOWN_SERVER_TIME_LIMIT = 518,
312 VAR_LOG_TAG_QUERYREPLY = 519,
313 VAR_STREAM_WAIT_SIZE = 520,
314 VAR_TLS_CIPHERS = 521,
315 VAR_TLS_CIPHERSUITES = 522,
316 VAR_IPSET = 523,
317 VAR_IPSET_NAME_V4 = 524,
318 VAR_IPSET_NAME_V6 = 525,
319 VAR_TLS_SESSION_TICKET_KEYS = 526,
320 VAR_RPZ = 527,
321 VAR_TAGS = 528,
322 VAR_RPZ_ACTION_OVERRIDE = 529,
323 VAR_RPZ_CNAME_OVERRIDE = 530,
324 VAR_RPZ_LOG = 531,
325 VAR_RPZ_LOG_NAME = 532
59 VAR_FORCE_TOPLEVEL = 266,
60 VAR_SERVER = 267,
61 VAR_VERBOSITY = 268,
62 VAR_NUM_THREADS = 269,
63 VAR_PORT = 270,
64 VAR_OUTGOING_RANGE = 271,
65 VAR_INTERFACE = 272,
66 VAR_PREFER_IP4 = 273,
67 VAR_DO_IP4 = 274,
68 VAR_DO_IP6 = 275,
69 VAR_PREFER_IP6 = 276,
70 VAR_DO_UDP = 277,
71 VAR_DO_TCP = 278,
72 VAR_TCP_MSS = 279,
73 VAR_OUTGOING_TCP_MSS = 280,
74 VAR_TCP_IDLE_TIMEOUT = 281,
75 VAR_EDNS_TCP_KEEPALIVE = 282,
76 VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 283,
77 VAR_CHROOT = 284,
78 VAR_USERNAME = 285,
79 VAR_DIRECTORY = 286,
80 VAR_LOGFILE = 287,
81 VAR_PIDFILE = 288,
82 VAR_MSG_CACHE_SIZE = 289,
83 VAR_MSG_CACHE_SLABS = 290,
84 VAR_NUM_QUERIES_PER_THREAD = 291,
85 VAR_RRSET_CACHE_SIZE = 292,
86 VAR_RRSET_CACHE_SLABS = 293,
87 VAR_OUTGOING_NUM_TCP = 294,
88 VAR_INFRA_HOST_TTL = 295,
89 VAR_INFRA_LAME_TTL = 296,
90 VAR_INFRA_CACHE_SLABS = 297,
91 VAR_INFRA_CACHE_NUMHOSTS = 298,
92 VAR_INFRA_CACHE_LAME_SIZE = 299,
93 VAR_NAME = 300,
94 VAR_STUB_ZONE = 301,
95 VAR_STUB_HOST = 302,
96 VAR_STUB_ADDR = 303,
97 VAR_TARGET_FETCH_POLICY = 304,
98 VAR_HARDEN_SHORT_BUFSIZE = 305,
99 VAR_HARDEN_LARGE_QUERIES = 306,
100 VAR_FORWARD_ZONE = 307,
101 VAR_FORWARD_HOST = 308,
102 VAR_FORWARD_ADDR = 309,
103 VAR_DO_NOT_QUERY_ADDRESS = 310,
104 VAR_HIDE_IDENTITY = 311,
105 VAR_HIDE_VERSION = 312,
106 VAR_IDENTITY = 313,
107 VAR_VERSION = 314,
108 VAR_HARDEN_GLUE = 315,
109 VAR_MODULE_CONF = 316,
110 VAR_TRUST_ANCHOR_FILE = 317,
111 VAR_TRUST_ANCHOR = 318,
112 VAR_VAL_OVERRIDE_DATE = 319,
113 VAR_BOGUS_TTL = 320,
114 VAR_VAL_CLEAN_ADDITIONAL = 321,
115 VAR_VAL_PERMISSIVE_MODE = 322,
116 VAR_INCOMING_NUM_TCP = 323,
117 VAR_MSG_BUFFER_SIZE = 324,
118 VAR_KEY_CACHE_SIZE = 325,
119 VAR_KEY_CACHE_SLABS = 326,
120 VAR_TRUSTED_KEYS_FILE = 327,
121 VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 328,
122 VAR_USE_SYSLOG = 329,
123 VAR_OUTGOING_INTERFACE = 330,
124 VAR_ROOT_HINTS = 331,
125 VAR_DO_NOT_QUERY_LOCALHOST = 332,
126 VAR_CACHE_MAX_TTL = 333,
127 VAR_HARDEN_DNSSEC_STRIPPED = 334,
128 VAR_ACCESS_CONTROL = 335,
129 VAR_LOCAL_ZONE = 336,
130 VAR_LOCAL_DATA = 337,
131 VAR_INTERFACE_AUTOMATIC = 338,
132 VAR_STATISTICS_INTERVAL = 339,
133 VAR_DO_DAEMONIZE = 340,
134 VAR_USE_CAPS_FOR_ID = 341,
135 VAR_STATISTICS_CUMULATIVE = 342,
136 VAR_OUTGOING_PORT_PERMIT = 343,
137 VAR_OUTGOING_PORT_AVOID = 344,
138 VAR_DLV_ANCHOR_FILE = 345,
139 VAR_DLV_ANCHOR = 346,
140 VAR_NEG_CACHE_SIZE = 347,
141 VAR_HARDEN_REFERRAL_PATH = 348,
142 VAR_PRIVATE_ADDRESS = 349,
143 VAR_PRIVATE_DOMAIN = 350,
144 VAR_REMOTE_CONTROL = 351,
145 VAR_CONTROL_ENABLE = 352,
146 VAR_CONTROL_INTERFACE = 353,
147 VAR_CONTROL_PORT = 354,
148 VAR_SERVER_KEY_FILE = 355,
149 VAR_SERVER_CERT_FILE = 356,
150 VAR_CONTROL_KEY_FILE = 357,
151 VAR_CONTROL_CERT_FILE = 358,
152 VAR_CONTROL_USE_CERT = 359,
153 VAR_EXTENDED_STATISTICS = 360,
154 VAR_LOCAL_DATA_PTR = 361,
155 VAR_JOSTLE_TIMEOUT = 362,
156 VAR_STUB_PRIME = 363,
157 VAR_UNWANTED_REPLY_THRESHOLD = 364,
158 VAR_LOG_TIME_ASCII = 365,
159 VAR_DOMAIN_INSECURE = 366,
160 VAR_PYTHON = 367,
161 VAR_PYTHON_SCRIPT = 368,
162 VAR_VAL_SIG_SKEW_MIN = 369,
163 VAR_VAL_SIG_SKEW_MAX = 370,
164 VAR_CACHE_MIN_TTL = 371,
165 VAR_VAL_LOG_LEVEL = 372,
166 VAR_AUTO_TRUST_ANCHOR_FILE = 373,
167 VAR_KEEP_MISSING = 374,
168 VAR_ADD_HOLDDOWN = 375,
169 VAR_DEL_HOLDDOWN = 376,
170 VAR_SO_RCVBUF = 377,
171 VAR_EDNS_BUFFER_SIZE = 378,
172 VAR_PREFETCH = 379,
173 VAR_PREFETCH_KEY = 380,
174 VAR_SO_SNDBUF = 381,
175 VAR_SO_REUSEPORT = 382,
176 VAR_HARDEN_BELOW_NXDOMAIN = 383,
177 VAR_IGNORE_CD_FLAG = 384,
178 VAR_LOG_QUERIES = 385,
179 VAR_LOG_REPLIES = 386,
180 VAR_LOG_LOCAL_ACTIONS = 387,
181 VAR_TCP_UPSTREAM = 388,
182 VAR_SSL_UPSTREAM = 389,
183 VAR_SSL_SERVICE_KEY = 390,
184 VAR_SSL_SERVICE_PEM = 391,
185 VAR_SSL_PORT = 392,
186 VAR_FORWARD_FIRST = 393,
187 VAR_STUB_SSL_UPSTREAM = 394,
188 VAR_FORWARD_SSL_UPSTREAM = 395,
189 VAR_TLS_CERT_BUNDLE = 396,
190 VAR_STUB_FIRST = 397,
191 VAR_MINIMAL_RESPONSES = 398,
192 VAR_RRSET_ROUNDROBIN = 399,
193 VAR_MAX_UDP_SIZE = 400,
194 VAR_DELAY_CLOSE = 401,
195 VAR_UNBLOCK_LAN_ZONES = 402,
196 VAR_INSECURE_LAN_ZONES = 403,
197 VAR_INFRA_CACHE_MIN_RTT = 404,
198 VAR_DNS64_PREFIX = 405,
199 VAR_DNS64_SYNTHALL = 406,
200 VAR_DNS64_IGNORE_AAAA = 407,
201 VAR_DNSTAP = 408,
202 VAR_DNSTAP_ENABLE = 409,
203 VAR_DNSTAP_SOCKET_PATH = 410,
204 VAR_DNSTAP_IP = 411,
205 VAR_DNSTAP_TLS = 412,
206 VAR_DNSTAP_TLS_SERVER_NAME = 413,
207 VAR_DNSTAP_TLS_CERT_BUNDLE = 414,
208 VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 415,
209 VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 416,
210 VAR_DNSTAP_SEND_IDENTITY = 417,
211 VAR_DNSTAP_SEND_VERSION = 418,
212 VAR_DNSTAP_BIDIRECTIONAL = 419,
213 VAR_DNSTAP_IDENTITY = 420,
214 VAR_DNSTAP_VERSION = 421,
215 VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 422,
216 VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 423,
217 VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 424,
218 VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 425,
219 VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 426,
220 VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 427,
221 VAR_RESPONSE_IP_TAG = 428,
222 VAR_RESPONSE_IP = 429,
223 VAR_RESPONSE_IP_DATA = 430,
224 VAR_HARDEN_ALGO_DOWNGRADE = 431,
225 VAR_IP_TRANSPARENT = 432,
226 VAR_IP_DSCP = 433,
227 VAR_DISABLE_DNSSEC_LAME_CHECK = 434,
228 VAR_IP_RATELIMIT = 435,
229 VAR_IP_RATELIMIT_SLABS = 436,
230 VAR_IP_RATELIMIT_SIZE = 437,
231 VAR_RATELIMIT = 438,
232 VAR_RATELIMIT_SLABS = 439,
233 VAR_RATELIMIT_SIZE = 440,
234 VAR_RATELIMIT_FOR_DOMAIN = 441,
235 VAR_RATELIMIT_BELOW_DOMAIN = 442,
236 VAR_IP_RATELIMIT_FACTOR = 443,
237 VAR_RATELIMIT_FACTOR = 444,
238 VAR_SEND_CLIENT_SUBNET = 445,
239 VAR_CLIENT_SUBNET_ZONE = 446,
240 VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 447,
241 VAR_CLIENT_SUBNET_OPCODE = 448,
242 VAR_MAX_CLIENT_SUBNET_IPV4 = 449,
243 VAR_MAX_CLIENT_SUBNET_IPV6 = 450,
244 VAR_MIN_CLIENT_SUBNET_IPV4 = 451,
245 VAR_MIN_CLIENT_SUBNET_IPV6 = 452,
246 VAR_MAX_ECS_TREE_SIZE_IPV4 = 453,
247 VAR_MAX_ECS_TREE_SIZE_IPV6 = 454,
248 VAR_CAPS_WHITELIST = 455,
249 VAR_CACHE_MAX_NEGATIVE_TTL = 456,
250 VAR_PERMIT_SMALL_HOLDDOWN = 457,
251 VAR_QNAME_MINIMISATION = 458,
252 VAR_QNAME_MINIMISATION_STRICT = 459,
253 VAR_IP_FREEBIND = 460,
254 VAR_DEFINE_TAG = 461,
255 VAR_LOCAL_ZONE_TAG = 462,
256 VAR_ACCESS_CONTROL_TAG = 463,
257 VAR_LOCAL_ZONE_OVERRIDE = 464,
258 VAR_ACCESS_CONTROL_TAG_ACTION = 465,
259 VAR_ACCESS_CONTROL_TAG_DATA = 466,
260 VAR_VIEW = 467,
261 VAR_ACCESS_CONTROL_VIEW = 468,
262 VAR_VIEW_FIRST = 469,
263 VAR_SERVE_EXPIRED = 470,
264 VAR_SERVE_EXPIRED_TTL = 471,
265 VAR_SERVE_EXPIRED_TTL_RESET = 472,
266 VAR_SERVE_EXPIRED_REPLY_TTL = 473,
267 VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 474,
268 VAR_FAKE_DSA = 475,
269 VAR_FAKE_SHA1 = 476,
270 VAR_LOG_IDENTITY = 477,
271 VAR_HIDE_TRUSTANCHOR = 478,
272 VAR_TRUST_ANCHOR_SIGNALING = 479,
273 VAR_AGGRESSIVE_NSEC = 480,
274 VAR_USE_SYSTEMD = 481,
275 VAR_SHM_ENABLE = 482,
276 VAR_SHM_KEY = 483,
277 VAR_ROOT_KEY_SENTINEL = 484,
278 VAR_DNSCRYPT = 485,
279 VAR_DNSCRYPT_ENABLE = 486,
280 VAR_DNSCRYPT_PORT = 487,
281 VAR_DNSCRYPT_PROVIDER = 488,
282 VAR_DNSCRYPT_SECRET_KEY = 489,
283 VAR_DNSCRYPT_PROVIDER_CERT = 490,
284 VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 491,
285 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 492,
286 VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 493,
287 VAR_DNSCRYPT_NONCE_CACHE_SIZE = 494,
288 VAR_DNSCRYPT_NONCE_CACHE_SLABS = 495,
289 VAR_IPSECMOD_ENABLED = 496,
290 VAR_IPSECMOD_HOOK = 497,
291 VAR_IPSECMOD_IGNORE_BOGUS = 498,
292 VAR_IPSECMOD_MAX_TTL = 499,
293 VAR_IPSECMOD_WHITELIST = 500,
294 VAR_IPSECMOD_STRICT = 501,
295 VAR_CACHEDB = 502,
296 VAR_CACHEDB_BACKEND = 503,
297 VAR_CACHEDB_SECRETSEED = 504,
298 VAR_CACHEDB_REDISHOST = 505,
299 VAR_CACHEDB_REDISPORT = 506,
300 VAR_CACHEDB_REDISTIMEOUT = 507,
301 VAR_CACHEDB_REDISEXPIRERECORDS = 508,
302 VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 509,
303 VAR_FOR_UPSTREAM = 510,
304 VAR_AUTH_ZONE = 511,
305 VAR_ZONEFILE = 512,
306 VAR_MASTER = 513,
307 VAR_URL = 514,
308 VAR_FOR_DOWNSTREAM = 515,
309 VAR_FALLBACK_ENABLED = 516,
310 VAR_TLS_ADDITIONAL_PORT = 517,
311 VAR_LOW_RTT = 518,
312 VAR_LOW_RTT_PERMIL = 519,
313 VAR_FAST_SERVER_PERMIL = 520,
314 VAR_FAST_SERVER_NUM = 521,
315 VAR_ALLOW_NOTIFY = 522,
316 VAR_TLS_WIN_CERT = 523,
317 VAR_TCP_CONNECTION_LIMIT = 524,
318 VAR_FORWARD_NO_CACHE = 525,
319 VAR_STUB_NO_CACHE = 526,
320 VAR_LOG_SERVFAIL = 527,
321 VAR_DENY_ANY = 528,
322 VAR_UNKNOWN_SERVER_TIME_LIMIT = 529,
323 VAR_LOG_TAG_QUERYREPLY = 530,
324 VAR_STREAM_WAIT_SIZE = 531,
325 VAR_TLS_CIPHERS = 532,
326 VAR_TLS_CIPHERSUITES = 533,
327 VAR_TLS_USE_SNI = 534,
328 VAR_IPSET = 535,
329 VAR_IPSET_NAME_V4 = 536,
330 VAR_IPSET_NAME_V6 = 537,
331 VAR_TLS_SESSION_TICKET_KEYS = 538,
332 VAR_RPZ = 539,
333 VAR_TAGS = 540,
334 VAR_RPZ_ACTION_OVERRIDE = 541,
335 VAR_RPZ_CNAME_OVERRIDE = 542,
336 VAR_RPZ_LOG = 543,
337 VAR_RPZ_LOG_NAME = 544,
338 VAR_DYNLIB = 545,
339 VAR_DYNLIB_FILE = 546
326340 };
327341 #endif
328342 /* Tokens. */
334348 #define ANY 263
335349 #define ZONESTR 264
336350 #define STRING_ARG 265
337 #define VAR_SERVER 266
338 #define VAR_VERBOSITY 267
339 #define VAR_NUM_THREADS 268
340 #define VAR_PORT 269
341 #define VAR_OUTGOING_RANGE 270
342 #define VAR_INTERFACE 271
343 #define VAR_DO_IP4 272
344 #define VAR_DO_IP6 273
345 #define VAR_PREFER_IP6 274
346 #define VAR_DO_UDP 275
347 #define VAR_DO_TCP 276
348 #define VAR_TCP_MSS 277
349 #define VAR_OUTGOING_TCP_MSS 278
350 #define VAR_TCP_IDLE_TIMEOUT 279
351 #define VAR_EDNS_TCP_KEEPALIVE 280
352 #define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 281
353 #define VAR_CHROOT 282
354 #define VAR_USERNAME 283
355 #define VAR_DIRECTORY 284
356 #define VAR_LOGFILE 285
357 #define VAR_PIDFILE 286
358 #define VAR_MSG_CACHE_SIZE 287
359 #define VAR_MSG_CACHE_SLABS 288
360 #define VAR_NUM_QUERIES_PER_THREAD 289
361 #define VAR_RRSET_CACHE_SIZE 290
362 #define VAR_RRSET_CACHE_SLABS 291
363 #define VAR_OUTGOING_NUM_TCP 292
364 #define VAR_INFRA_HOST_TTL 293
365 #define VAR_INFRA_LAME_TTL 294
366 #define VAR_INFRA_CACHE_SLABS 295
367 #define VAR_INFRA_CACHE_NUMHOSTS 296
368 #define VAR_INFRA_CACHE_LAME_SIZE 297
369 #define VAR_NAME 298
370 #define VAR_STUB_ZONE 299
371 #define VAR_STUB_HOST 300
372 #define VAR_STUB_ADDR 301
373 #define VAR_TARGET_FETCH_POLICY 302
374 #define VAR_HARDEN_SHORT_BUFSIZE 303
375 #define VAR_HARDEN_LARGE_QUERIES 304
376 #define VAR_FORWARD_ZONE 305
377 #define VAR_FORWARD_HOST 306
378 #define VAR_FORWARD_ADDR 307
379 #define VAR_DO_NOT_QUERY_ADDRESS 308
380 #define VAR_HIDE_IDENTITY 309
381 #define VAR_HIDE_VERSION 310
382 #define VAR_IDENTITY 311
383 #define VAR_VERSION 312
384 #define VAR_HARDEN_GLUE 313
385 #define VAR_MODULE_CONF 314
386 #define VAR_TRUST_ANCHOR_FILE 315
387 #define VAR_TRUST_ANCHOR 316
388 #define VAR_VAL_OVERRIDE_DATE 317
389 #define VAR_BOGUS_TTL 318
390 #define VAR_VAL_CLEAN_ADDITIONAL 319
391 #define VAR_VAL_PERMISSIVE_MODE 320
392 #define VAR_INCOMING_NUM_TCP 321
393 #define VAR_MSG_BUFFER_SIZE 322
394 #define VAR_KEY_CACHE_SIZE 323
395 #define VAR_KEY_CACHE_SLABS 324
396 #define VAR_TRUSTED_KEYS_FILE 325
397 #define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 326
398 #define VAR_USE_SYSLOG 327
399 #define VAR_OUTGOING_INTERFACE 328
400 #define VAR_ROOT_HINTS 329
401 #define VAR_DO_NOT_QUERY_LOCALHOST 330
402 #define VAR_CACHE_MAX_TTL 331
403 #define VAR_HARDEN_DNSSEC_STRIPPED 332
404 #define VAR_ACCESS_CONTROL 333
405 #define VAR_LOCAL_ZONE 334
406 #define VAR_LOCAL_DATA 335
407 #define VAR_INTERFACE_AUTOMATIC 336
408 #define VAR_STATISTICS_INTERVAL 337
409 #define VAR_DO_DAEMONIZE 338
410 #define VAR_USE_CAPS_FOR_ID 339
411 #define VAR_STATISTICS_CUMULATIVE 340
412 #define VAR_OUTGOING_PORT_PERMIT 341
413 #define VAR_OUTGOING_PORT_AVOID 342
414 #define VAR_DLV_ANCHOR_FILE 343
415 #define VAR_DLV_ANCHOR 344
416 #define VAR_NEG_CACHE_SIZE 345
417 #define VAR_HARDEN_REFERRAL_PATH 346
418 #define VAR_PRIVATE_ADDRESS 347
419 #define VAR_PRIVATE_DOMAIN 348
420 #define VAR_REMOTE_CONTROL 349
421 #define VAR_CONTROL_ENABLE 350
422 #define VAR_CONTROL_INTERFACE 351
423 #define VAR_CONTROL_PORT 352
424 #define VAR_SERVER_KEY_FILE 353
425 #define VAR_SERVER_CERT_FILE 354
426 #define VAR_CONTROL_KEY_FILE 355
427 #define VAR_CONTROL_CERT_FILE 356
428 #define VAR_CONTROL_USE_CERT 357
429 #define VAR_EXTENDED_STATISTICS 358
430 #define VAR_LOCAL_DATA_PTR 359
431 #define VAR_JOSTLE_TIMEOUT 360
432 #define VAR_STUB_PRIME 361
433 #define VAR_UNWANTED_REPLY_THRESHOLD 362
434 #define VAR_LOG_TIME_ASCII 363
435 #define VAR_DOMAIN_INSECURE 364
436 #define VAR_PYTHON 365
437 #define VAR_PYTHON_SCRIPT 366
438 #define VAR_VAL_SIG_SKEW_MIN 367
439 #define VAR_VAL_SIG_SKEW_MAX 368
440 #define VAR_CACHE_MIN_TTL 369
441 #define VAR_VAL_LOG_LEVEL 370
442 #define VAR_AUTO_TRUST_ANCHOR_FILE 371
443 #define VAR_KEEP_MISSING 372
444 #define VAR_ADD_HOLDDOWN 373
445 #define VAR_DEL_HOLDDOWN 374
446 #define VAR_SO_RCVBUF 375
447 #define VAR_EDNS_BUFFER_SIZE 376
448 #define VAR_PREFETCH 377
449 #define VAR_PREFETCH_KEY 378
450 #define VAR_SO_SNDBUF 379
451 #define VAR_SO_REUSEPORT 380
452 #define VAR_HARDEN_BELOW_NXDOMAIN 381
453 #define VAR_IGNORE_CD_FLAG 382
454 #define VAR_LOG_QUERIES 383
455 #define VAR_LOG_REPLIES 384
456 #define VAR_LOG_LOCAL_ACTIONS 385
457 #define VAR_TCP_UPSTREAM 386
458 #define VAR_SSL_UPSTREAM 387
459 #define VAR_SSL_SERVICE_KEY 388
460 #define VAR_SSL_SERVICE_PEM 389
461 #define VAR_SSL_PORT 390
462 #define VAR_FORWARD_FIRST 391
463 #define VAR_STUB_SSL_UPSTREAM 392
464 #define VAR_FORWARD_SSL_UPSTREAM 393
465 #define VAR_TLS_CERT_BUNDLE 394
466 #define VAR_STUB_FIRST 395
467 #define VAR_MINIMAL_RESPONSES 396
468 #define VAR_RRSET_ROUNDROBIN 397
469 #define VAR_MAX_UDP_SIZE 398
470 #define VAR_DELAY_CLOSE 399
471 #define VAR_UNBLOCK_LAN_ZONES 400
472 #define VAR_INSECURE_LAN_ZONES 401
473 #define VAR_INFRA_CACHE_MIN_RTT 402
474 #define VAR_DNS64_PREFIX 403
475 #define VAR_DNS64_SYNTHALL 404
476 #define VAR_DNS64_IGNORE_AAAA 405
477 #define VAR_DNSTAP 406
478 #define VAR_DNSTAP_ENABLE 407
479 #define VAR_DNSTAP_SOCKET_PATH 408
480 #define VAR_DNSTAP_SEND_IDENTITY 409
481 #define VAR_DNSTAP_SEND_VERSION 410
482 #define VAR_DNSTAP_IDENTITY 411
483 #define VAR_DNSTAP_VERSION 412
484 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 413
485 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 414
486 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 415
487 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 416
488 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 417
489 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 418
490 #define VAR_RESPONSE_IP_TAG 419
491 #define VAR_RESPONSE_IP 420
492 #define VAR_RESPONSE_IP_DATA 421
493 #define VAR_HARDEN_ALGO_DOWNGRADE 422
494 #define VAR_IP_TRANSPARENT 423
495 #define VAR_DISABLE_DNSSEC_LAME_CHECK 424
496 #define VAR_IP_RATELIMIT 425
497 #define VAR_IP_RATELIMIT_SLABS 426
498 #define VAR_IP_RATELIMIT_SIZE 427
499 #define VAR_RATELIMIT 428
500 #define VAR_RATELIMIT_SLABS 429
501 #define VAR_RATELIMIT_SIZE 430
502 #define VAR_RATELIMIT_FOR_DOMAIN 431
503 #define VAR_RATELIMIT_BELOW_DOMAIN 432
504 #define VAR_IP_RATELIMIT_FACTOR 433
505 #define VAR_RATELIMIT_FACTOR 434
506 #define VAR_SEND_CLIENT_SUBNET 435
507 #define VAR_CLIENT_SUBNET_ZONE 436
508 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 437
509 #define VAR_CLIENT_SUBNET_OPCODE 438
510 #define VAR_MAX_CLIENT_SUBNET_IPV4 439
511 #define VAR_MAX_CLIENT_SUBNET_IPV6 440
512 #define VAR_MIN_CLIENT_SUBNET_IPV4 441
513 #define VAR_MIN_CLIENT_SUBNET_IPV6 442
514 #define VAR_MAX_ECS_TREE_SIZE_IPV4 443
515 #define VAR_MAX_ECS_TREE_SIZE_IPV6 444
516 #define VAR_CAPS_WHITELIST 445
517 #define VAR_CACHE_MAX_NEGATIVE_TTL 446
518 #define VAR_PERMIT_SMALL_HOLDDOWN 447
519 #define VAR_QNAME_MINIMISATION 448
520 #define VAR_QNAME_MINIMISATION_STRICT 449
521 #define VAR_IP_FREEBIND 450
522 #define VAR_DEFINE_TAG 451
523 #define VAR_LOCAL_ZONE_TAG 452
524 #define VAR_ACCESS_CONTROL_TAG 453
525 #define VAR_LOCAL_ZONE_OVERRIDE 454
526 #define VAR_ACCESS_CONTROL_TAG_ACTION 455
527 #define VAR_ACCESS_CONTROL_TAG_DATA 456
528 #define VAR_VIEW 457
529 #define VAR_ACCESS_CONTROL_VIEW 458
530 #define VAR_VIEW_FIRST 459
531 #define VAR_SERVE_EXPIRED 460
532 #define VAR_SERVE_EXPIRED_TTL 461
533 #define VAR_SERVE_EXPIRED_TTL_RESET 462
534 #define VAR_SERVE_EXPIRED_REPLY_TTL 463
535 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 464
536 #define VAR_FAKE_DSA 465
537 #define VAR_FAKE_SHA1 466
538 #define VAR_LOG_IDENTITY 467
539 #define VAR_HIDE_TRUSTANCHOR 468
540 #define VAR_TRUST_ANCHOR_SIGNALING 469
541 #define VAR_AGGRESSIVE_NSEC 470
542 #define VAR_USE_SYSTEMD 471
543 #define VAR_SHM_ENABLE 472
544 #define VAR_SHM_KEY 473
545 #define VAR_ROOT_KEY_SENTINEL 474
546 #define VAR_DNSCRYPT 475
547 #define VAR_DNSCRYPT_ENABLE 476
548 #define VAR_DNSCRYPT_PORT 477
549 #define VAR_DNSCRYPT_PROVIDER 478
550 #define VAR_DNSCRYPT_SECRET_KEY 479
551 #define VAR_DNSCRYPT_PROVIDER_CERT 480
552 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 481
553 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 482
554 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 483
555 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 484
556 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 485
557 #define VAR_IPSECMOD_ENABLED 486
558 #define VAR_IPSECMOD_HOOK 487
559 #define VAR_IPSECMOD_IGNORE_BOGUS 488
560 #define VAR_IPSECMOD_MAX_TTL 489
561 #define VAR_IPSECMOD_WHITELIST 490
562 #define VAR_IPSECMOD_STRICT 491
563 #define VAR_CACHEDB 492
564 #define VAR_CACHEDB_BACKEND 493
565 #define VAR_CACHEDB_SECRETSEED 494
566 #define VAR_CACHEDB_REDISHOST 495
567 #define VAR_CACHEDB_REDISPORT 496
568 #define VAR_CACHEDB_REDISTIMEOUT 497
569 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 498
570 #define VAR_FOR_UPSTREAM 499
571 #define VAR_AUTH_ZONE 500
572 #define VAR_ZONEFILE 501
573 #define VAR_MASTER 502
574 #define VAR_URL 503
575 #define VAR_FOR_DOWNSTREAM 504
576 #define VAR_FALLBACK_ENABLED 505
577 #define VAR_TLS_ADDITIONAL_PORT 506
578 #define VAR_LOW_RTT 507
579 #define VAR_LOW_RTT_PERMIL 508
580 #define VAR_FAST_SERVER_PERMIL 509
581 #define VAR_FAST_SERVER_NUM 510
582 #define VAR_ALLOW_NOTIFY 511
583 #define VAR_TLS_WIN_CERT 512
584 #define VAR_TCP_CONNECTION_LIMIT 513
585 #define VAR_FORWARD_NO_CACHE 514
586 #define VAR_STUB_NO_CACHE 515
587 #define VAR_LOG_SERVFAIL 516
588 #define VAR_DENY_ANY 517
589 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 518
590 #define VAR_LOG_TAG_QUERYREPLY 519
591 #define VAR_STREAM_WAIT_SIZE 520
592 #define VAR_TLS_CIPHERS 521
593 #define VAR_TLS_CIPHERSUITES 522
594 #define VAR_IPSET 523
595 #define VAR_IPSET_NAME_V4 524
596 #define VAR_IPSET_NAME_V6 525
597 #define VAR_TLS_SESSION_TICKET_KEYS 526
598 #define VAR_RPZ 527
599 #define VAR_TAGS 528
600 #define VAR_RPZ_ACTION_OVERRIDE 529
601 #define VAR_RPZ_CNAME_OVERRIDE 530
602 #define VAR_RPZ_LOG 531
603 #define VAR_RPZ_LOG_NAME 532
351 #define VAR_FORCE_TOPLEVEL 266
352 #define VAR_SERVER 267
353 #define VAR_VERBOSITY 268
354 #define VAR_NUM_THREADS 269
355 #define VAR_PORT 270
356 #define VAR_OUTGOING_RANGE 271
357 #define VAR_INTERFACE 272
358 #define VAR_PREFER_IP4 273
359 #define VAR_DO_IP4 274
360 #define VAR_DO_IP6 275
361 #define VAR_PREFER_IP6 276
362 #define VAR_DO_UDP 277
363 #define VAR_DO_TCP 278
364 #define VAR_TCP_MSS 279
365 #define VAR_OUTGOING_TCP_MSS 280
366 #define VAR_TCP_IDLE_TIMEOUT 281
367 #define VAR_EDNS_TCP_KEEPALIVE 282
368 #define VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 283
369 #define VAR_CHROOT 284
370 #define VAR_USERNAME 285
371 #define VAR_DIRECTORY 286
372 #define VAR_LOGFILE 287
373 #define VAR_PIDFILE 288
374 #define VAR_MSG_CACHE_SIZE 289
375 #define VAR_MSG_CACHE_SLABS 290
376 #define VAR_NUM_QUERIES_PER_THREAD 291
377 #define VAR_RRSET_CACHE_SIZE 292
378 #define VAR_RRSET_CACHE_SLABS 293
379 #define VAR_OUTGOING_NUM_TCP 294
380 #define VAR_INFRA_HOST_TTL 295
381 #define VAR_INFRA_LAME_TTL 296
382 #define VAR_INFRA_CACHE_SLABS 297
383 #define VAR_INFRA_CACHE_NUMHOSTS 298
384 #define VAR_INFRA_CACHE_LAME_SIZE 299
385 #define VAR_NAME 300
386 #define VAR_STUB_ZONE 301
387 #define VAR_STUB_HOST 302
388 #define VAR_STUB_ADDR 303
389 #define VAR_TARGET_FETCH_POLICY 304
390 #define VAR_HARDEN_SHORT_BUFSIZE 305
391 #define VAR_HARDEN_LARGE_QUERIES 306
392 #define VAR_FORWARD_ZONE 307
393 #define VAR_FORWARD_HOST 308
394 #define VAR_FORWARD_ADDR 309
395 #define VAR_DO_NOT_QUERY_ADDRESS 310
396 #define VAR_HIDE_IDENTITY 311
397 #define VAR_HIDE_VERSION 312
398 #define VAR_IDENTITY 313
399 #define VAR_VERSION 314
400 #define VAR_HARDEN_GLUE 315
401 #define VAR_MODULE_CONF 316
402 #define VAR_TRUST_ANCHOR_FILE 317
403 #define VAR_TRUST_ANCHOR 318
404 #define VAR_VAL_OVERRIDE_DATE 319
405 #define VAR_BOGUS_TTL 320
406 #define VAR_VAL_CLEAN_ADDITIONAL 321
407 #define VAR_VAL_PERMISSIVE_MODE 322
408 #define VAR_INCOMING_NUM_TCP 323
409 #define VAR_MSG_BUFFER_SIZE 324
410 #define VAR_KEY_CACHE_SIZE 325
411 #define VAR_KEY_CACHE_SLABS 326
412 #define VAR_TRUSTED_KEYS_FILE 327
413 #define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 328
414 #define VAR_USE_SYSLOG 329
415 #define VAR_OUTGOING_INTERFACE 330
416 #define VAR_ROOT_HINTS 331
417 #define VAR_DO_NOT_QUERY_LOCALHOST 332
418 #define VAR_CACHE_MAX_TTL 333
419 #define VAR_HARDEN_DNSSEC_STRIPPED 334
420 #define VAR_ACCESS_CONTROL 335
421 #define VAR_LOCAL_ZONE 336
422 #define VAR_LOCAL_DATA 337
423 #define VAR_INTERFACE_AUTOMATIC 338
424 #define VAR_STATISTICS_INTERVAL 339
425 #define VAR_DO_DAEMONIZE 340
426 #define VAR_USE_CAPS_FOR_ID 341
427 #define VAR_STATISTICS_CUMULATIVE 342
428 #define VAR_OUTGOING_PORT_PERMIT 343
429 #define VAR_OUTGOING_PORT_AVOID 344
430 #define VAR_DLV_ANCHOR_FILE 345
431 #define VAR_DLV_ANCHOR 346
432 #define VAR_NEG_CACHE_SIZE 347
433 #define VAR_HARDEN_REFERRAL_PATH 348
434 #define VAR_PRIVATE_ADDRESS 349
435 #define VAR_PRIVATE_DOMAIN 350
436 #define VAR_REMOTE_CONTROL 351
437 #define VAR_CONTROL_ENABLE 352
438 #define VAR_CONTROL_INTERFACE 353
439 #define VAR_CONTROL_PORT 354
440 #define VAR_SERVER_KEY_FILE 355
441 #define VAR_SERVER_CERT_FILE 356
442 #define VAR_CONTROL_KEY_FILE 357
443 #define VAR_CONTROL_CERT_FILE 358
444 #define VAR_CONTROL_USE_CERT 359
445 #define VAR_EXTENDED_STATISTICS 360
446 #define VAR_LOCAL_DATA_PTR 361
447 #define VAR_JOSTLE_TIMEOUT 362
448 #define VAR_STUB_PRIME 363
449 #define VAR_UNWANTED_REPLY_THRESHOLD 364
450 #define VAR_LOG_TIME_ASCII 365
451 #define VAR_DOMAIN_INSECURE 366
452 #define VAR_PYTHON 367
453 #define VAR_PYTHON_SCRIPT 368
454 #define VAR_VAL_SIG_SKEW_MIN 369
455 #define VAR_VAL_SIG_SKEW_MAX 370
456 #define VAR_CACHE_MIN_TTL 371
457 #define VAR_VAL_LOG_LEVEL 372
458 #define VAR_AUTO_TRUST_ANCHOR_FILE 373
459 #define VAR_KEEP_MISSING 374
460 #define VAR_ADD_HOLDDOWN 375
461 #define VAR_DEL_HOLDDOWN 376
462 #define VAR_SO_RCVBUF 377
463 #define VAR_EDNS_BUFFER_SIZE 378
464 #define VAR_PREFETCH 379
465 #define VAR_PREFETCH_KEY 380
466 #define VAR_SO_SNDBUF 381
467 #define VAR_SO_REUSEPORT 382
468 #define VAR_HARDEN_BELOW_NXDOMAIN 383
469 #define VAR_IGNORE_CD_FLAG 384
470 #define VAR_LOG_QUERIES 385
471 #define VAR_LOG_REPLIES 386
472 #define VAR_LOG_LOCAL_ACTIONS 387
473 #define VAR_TCP_UPSTREAM 388
474 #define VAR_SSL_UPSTREAM 389
475 #define VAR_SSL_SERVICE_KEY 390
476 #define VAR_SSL_SERVICE_PEM 391
477 #define VAR_SSL_PORT 392
478 #define VAR_FORWARD_FIRST 393
479 #define VAR_STUB_SSL_UPSTREAM 394
480 #define VAR_FORWARD_SSL_UPSTREAM 395
481 #define VAR_TLS_CERT_BUNDLE 396
482 #define VAR_STUB_FIRST 397
483 #define VAR_MINIMAL_RESPONSES 398
484 #define VAR_RRSET_ROUNDROBIN 399
485 #define VAR_MAX_UDP_SIZE 400
486 #define VAR_DELAY_CLOSE 401
487 #define VAR_UNBLOCK_LAN_ZONES 402
488 #define VAR_INSECURE_LAN_ZONES 403
489 #define VAR_INFRA_CACHE_MIN_RTT 404
490 #define VAR_DNS64_PREFIX 405
491 #define VAR_DNS64_SYNTHALL 406
492 #define VAR_DNS64_IGNORE_AAAA 407
493 #define VAR_DNSTAP 408
494 #define VAR_DNSTAP_ENABLE 409
495 #define VAR_DNSTAP_SOCKET_PATH 410
496 #define VAR_DNSTAP_IP 411
497 #define VAR_DNSTAP_TLS 412
498 #define VAR_DNSTAP_TLS_SERVER_NAME 413
499 #define VAR_DNSTAP_TLS_CERT_BUNDLE 414
500 #define VAR_DNSTAP_TLS_CLIENT_KEY_FILE 415
501 #define VAR_DNSTAP_TLS_CLIENT_CERT_FILE 416
502 #define VAR_DNSTAP_SEND_IDENTITY 417
503 #define VAR_DNSTAP_SEND_VERSION 418
504 #define VAR_DNSTAP_BIDIRECTIONAL 419
505 #define VAR_DNSTAP_IDENTITY 420
506 #define VAR_DNSTAP_VERSION 421
507 #define VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 422
508 #define VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 423
509 #define VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 424
510 #define VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 425
511 #define VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 426
512 #define VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 427
513 #define VAR_RESPONSE_IP_TAG 428
514 #define VAR_RESPONSE_IP 429
515 #define VAR_RESPONSE_IP_DATA 430
516 #define VAR_HARDEN_ALGO_DOWNGRADE 431
517 #define VAR_IP_TRANSPARENT 432
518 #define VAR_IP_DSCP 433
519 #define VAR_DISABLE_DNSSEC_LAME_CHECK 434
520 #define VAR_IP_RATELIMIT 435
521 #define VAR_IP_RATELIMIT_SLABS 436
522 #define VAR_IP_RATELIMIT_SIZE 437
523 #define VAR_RATELIMIT 438
524 #define VAR_RATELIMIT_SLABS 439
525 #define VAR_RATELIMIT_SIZE 440
526 #define VAR_RATELIMIT_FOR_DOMAIN 441
527 #define VAR_RATELIMIT_BELOW_DOMAIN 442
528 #define VAR_IP_RATELIMIT_FACTOR 443
529 #define VAR_RATELIMIT_FACTOR 444
530 #define VAR_SEND_CLIENT_SUBNET 445
531 #define VAR_CLIENT_SUBNET_ZONE 446
532 #define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 447
533 #define VAR_CLIENT_SUBNET_OPCODE 448
534 #define VAR_MAX_CLIENT_SUBNET_IPV4 449
535 #define VAR_MAX_CLIENT_SUBNET_IPV6 450
536 #define VAR_MIN_CLIENT_SUBNET_IPV4 451
537 #define VAR_MIN_CLIENT_SUBNET_IPV6 452
538 #define VAR_MAX_ECS_TREE_SIZE_IPV4 453
539 #define VAR_MAX_ECS_TREE_SIZE_IPV6 454
540 #define VAR_CAPS_WHITELIST 455
541 #define VAR_CACHE_MAX_NEGATIVE_TTL 456
542 #define VAR_PERMIT_SMALL_HOLDDOWN 457
543 #define VAR_QNAME_MINIMISATION 458
544 #define VAR_QNAME_MINIMISATION_STRICT 459
545 #define VAR_IP_FREEBIND 460
546 #define VAR_DEFINE_TAG 461
547 #define VAR_LOCAL_ZONE_TAG 462
548 #define VAR_ACCESS_CONTROL_TAG 463
549 #define VAR_LOCAL_ZONE_OVERRIDE 464
550 #define VAR_ACCESS_CONTROL_TAG_ACTION 465
551 #define VAR_ACCESS_CONTROL_TAG_DATA 466
552 #define VAR_VIEW 467
553 #define VAR_ACCESS_CONTROL_VIEW 468
554 #define VAR_VIEW_FIRST 469
555 #define VAR_SERVE_EXPIRED 470
556 #define VAR_SERVE_EXPIRED_TTL 471
557 #define VAR_SERVE_EXPIRED_TTL_RESET 472
558 #define VAR_SERVE_EXPIRED_REPLY_TTL 473
559 #define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 474
560 #define VAR_FAKE_DSA 475
561 #define VAR_FAKE_SHA1 476
562 #define VAR_LOG_IDENTITY 477
563 #define VAR_HIDE_TRUSTANCHOR 478
564 #define VAR_TRUST_ANCHOR_SIGNALING 479
565 #define VAR_AGGRESSIVE_NSEC 480
566 #define VAR_USE_SYSTEMD 481
567 #define VAR_SHM_ENABLE 482
568 #define VAR_SHM_KEY 483
569 #define VAR_ROOT_KEY_SENTINEL 484
570 #define VAR_DNSCRYPT 485
571 #define VAR_DNSCRYPT_ENABLE 486
572 #define VAR_DNSCRYPT_PORT 487
573 #define VAR_DNSCRYPT_PROVIDER 488
574 #define VAR_DNSCRYPT_SECRET_KEY 489
575 #define VAR_DNSCRYPT_PROVIDER_CERT 490
576 #define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 491
577 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 492
578 #define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 493
579 #define VAR_DNSCRYPT_NONCE_CACHE_SIZE 494
580 #define VAR_DNSCRYPT_NONCE_CACHE_SLABS 495
581 #define VAR_IPSECMOD_ENABLED 496
582 #define VAR_IPSECMOD_HOOK 497
583 #define VAR_IPSECMOD_IGNORE_BOGUS 498
584 #define VAR_IPSECMOD_MAX_TTL 499
585 #define VAR_IPSECMOD_WHITELIST 500
586 #define VAR_IPSECMOD_STRICT 501
587 #define VAR_CACHEDB 502
588 #define VAR_CACHEDB_BACKEND 503
589 #define VAR_CACHEDB_SECRETSEED 504
590 #define VAR_CACHEDB_REDISHOST 505
591 #define VAR_CACHEDB_REDISPORT 506
592 #define VAR_CACHEDB_REDISTIMEOUT 507
593 #define VAR_CACHEDB_REDISEXPIRERECORDS 508
594 #define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 509
595 #define VAR_FOR_UPSTREAM 510
596 #define VAR_AUTH_ZONE 511
597 #define VAR_ZONEFILE 512
598 #define VAR_MASTER 513
599 #define VAR_URL 514
600 #define VAR_FOR_DOWNSTREAM 515
601 #define VAR_FALLBACK_ENABLED 516
602 #define VAR_TLS_ADDITIONAL_PORT 517
603 #define VAR_LOW_RTT 518
604 #define VAR_LOW_RTT_PERMIL 519
605 #define VAR_FAST_SERVER_PERMIL 520
606 #define VAR_FAST_SERVER_NUM 521
607 #define VAR_ALLOW_NOTIFY 522
608 #define VAR_TLS_WIN_CERT 523
609 #define VAR_TCP_CONNECTION_LIMIT 524
610 #define VAR_FORWARD_NO_CACHE 525
611 #define VAR_STUB_NO_CACHE 526
612 #define VAR_LOG_SERVFAIL 527
613 #define VAR_DENY_ANY 528
614 #define VAR_UNKNOWN_SERVER_TIME_LIMIT 529
615 #define VAR_LOG_TAG_QUERYREPLY 530
616 #define VAR_STREAM_WAIT_SIZE 531
617 #define VAR_TLS_CIPHERS 532
618 #define VAR_TLS_CIPHERSUITES 533
619 #define VAR_TLS_USE_SNI 534
620 #define VAR_IPSET 535
621 #define VAR_IPSET_NAME_V4 536
622 #define VAR_IPSET_NAME_V6 537
623 #define VAR_TLS_SESSION_TICKET_KEYS 538
624 #define VAR_RPZ 539
625 #define VAR_TAGS 540
626 #define VAR_RPZ_ACTION_OVERRIDE 541
627 #define VAR_RPZ_CNAME_OVERRIDE 542
628 #define VAR_RPZ_LOG 543
629 #define VAR_RPZ_LOG_NAME 544
630 #define VAR_DYNLIB 545
631 #define VAR_DYNLIB_FILE 546
604632
605633 /* Value type. */
606634 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
610638
611639 char* str;
612640
613 #line 615 "util/configparser.h"
641 #line 643 "util/configparser.h"
614642
615643 };
616644 typedef union YYSTYPE YYSTYPE;
6868
6969 %token SPACE LETTER NEWLINE COMMENT COLON ANY ZONESTR
7070 %token <str> STRING_ARG
71 %token VAR_FORCE_TOPLEVEL
7172 %token VAR_SERVER VAR_VERBOSITY VAR_NUM_THREADS VAR_PORT
72 %token VAR_OUTGOING_RANGE VAR_INTERFACE
73 %token VAR_OUTGOING_RANGE VAR_INTERFACE VAR_PREFER_IP4
7374 %token VAR_DO_IP4 VAR_DO_IP6 VAR_PREFER_IP6 VAR_DO_UDP VAR_DO_TCP
7475 %token VAR_TCP_MSS VAR_OUTGOING_TCP_MSS VAR_TCP_IDLE_TIMEOUT
7576 %token VAR_EDNS_TCP_KEEPALIVE VAR_EDNS_TCP_KEEPALIVE_TIMEOUT
115116 %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES
116117 %token VAR_INFRA_CACHE_MIN_RTT
117118 %token VAR_DNS64_PREFIX VAR_DNS64_SYNTHALL VAR_DNS64_IGNORE_AAAA
118 %token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH
119 %token VAR_DNSTAP_SEND_IDENTITY VAR_DNSTAP_SEND_VERSION
119 %token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH VAR_DNSTAP_IP
120 %token VAR_DNSTAP_TLS VAR_DNSTAP_TLS_SERVER_NAME VAR_DNSTAP_TLS_CERT_BUNDLE
121 %token VAR_DNSTAP_TLS_CLIENT_KEY_FILE VAR_DNSTAP_TLS_CLIENT_CERT_FILE
122 %token VAR_DNSTAP_SEND_IDENTITY VAR_DNSTAP_SEND_VERSION VAR_DNSTAP_BIDIRECTIONAL
120123 %token VAR_DNSTAP_IDENTITY VAR_DNSTAP_VERSION
121124 %token VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES
122125 %token VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES
126129 %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES
127130 %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA
128131 %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT
132 %token VAR_IP_DSCP
129133 %token VAR_DISABLE_DNSSEC_LAME_CHECK
130134 %token VAR_IP_RATELIMIT VAR_IP_RATELIMIT_SLABS VAR_IP_RATELIMIT_SIZE
131135 %token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE
158162 %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT
159163 %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED
160164 %token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT
165 %token VAR_CACHEDB_REDISEXPIRERECORDS
161166 %token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM
162167 %token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM
163168 %token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL
165170 %token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT VAR_TCP_CONNECTION_LIMIT
166171 %token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY
167172 %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY
168 %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES
173 %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES VAR_TLS_USE_SNI
169174 %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6
170175 %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE
171176 %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME
177 %token VAR_DYNLIB VAR_DYNLIB_FILE
172178
173179 %%
174180 toplevelvars: /* empty */ | toplevelvars toplevelvar ;
177183 rcstart contents_rc | dtstart contents_dt | viewstart contents_view |
178184 dnscstart contents_dnsc | cachedbstart contents_cachedb |
179185 ipsetstart contents_ipset | authstart contents_auth |
180 rpzstart contents_rpz
181 ;
182
186 rpzstart contents_rpz | dynlibstart contents_dl |
187 force_toplevel
188 ;
189 force_toplevel: VAR_FORCE_TOPLEVEL
190 {
191 OUTYY(("\nP(force-toplevel)\n"));
192 }
193 ;
183194 /* server: declaration */
184195 serverstart: VAR_SERVER
185196 {
186 OUTYY(("\nP(server:)\n"));
187 }
188 ;
189 contents_server: contents_server content_server
197 OUTYY(("\nP(server:)\n"));
198 }
199 ;
200 contents_server: contents_server content_server
190201 | ;
191202 content_server: server_num_threads | server_verbosity | server_port |
192203 server_outgoing_range | server_do_ip4 |
193 server_do_ip6 | server_prefer_ip6 |
204 server_do_ip6 | server_prefer_ip4 | server_prefer_ip6 |
194205 server_do_udp | server_do_tcp |
195206 server_tcp_mss | server_outgoing_tcp_mss | server_tcp_idle_timeout |
196207 server_tcp_keepalive | server_tcp_keepalive_timeout |
238249 server_dns64_prefix | server_dns64_synthall | server_dns64_ignore_aaaa |
239250 server_infra_cache_min_rtt | server_harden_algo_downgrade |
240251 server_ip_transparent | server_ip_ratelimit | server_ratelimit |
252 server_ip_dscp |
241253 server_ip_ratelimit_slabs | server_ratelimit_slabs |
242254 server_ip_ratelimit_size | server_ratelimit_size |
243255 server_ratelimit_for_domain |
271283 server_tcp_connection_limit | server_log_servfail | server_deny_any |
272284 server_unknown_server_time_limit | server_log_tag_queryreply |
273285 server_stream_wait_size | server_tls_ciphers |
274 server_tls_ciphersuites | server_tls_session_ticket_keys
286 server_tls_ciphersuites | server_tls_session_ticket_keys |
287 server_tls_use_sni
275288 ;
276289 stubstart: VAR_STUB_ZONE
277290 {
779792 free($2);
780793 }
781794 ;
795 server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG
796 {
797 OUTYY(("P(server_prefer_ip4:%s)\n", $2));
798 if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
799 yyerror("expected yes or no.");
800 else cfg_parser->cfg->prefer_ip4 = (strcmp($2, "yes")==0);
801 free($2);
802 }
803 ;
782804 server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG
783805 {
784806 OUTYY(("P(server_prefer_ip6:%s)\n", $2));
935957 if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
936958 $2))
937959 yyerror("out of memory");
960 }
961 ;
962 server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG
963 {
964 OUTYY(("P(server_tls_use_sni:%s)\n", $2));
965 if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
966 yyerror("expected yes or no.");
967 else cfg_parser->cfg->tls_use_sni = (strcmp($2, "yes")==0);
968 free($2);
938969 }
939970 ;
940971 server_use_systemd: VAR_USE_SYSTEMD STRING_ARG
12461277 free($2);
12471278 }
12481279 ;
1280 server_ip_dscp: VAR_IP_DSCP STRING_ARG
1281 {
1282 OUTYY(("P(server_ip_dscp:%s)\n", $2));
1283 if(atoi($2) == 0 && strcmp($2, "0") != 0)
1284 yyerror("number expected");
1285 else if (atoi($2) > 63)
1286 yyerror("value too large (max 63)");
1287 else if (atoi($2) < 0)
1288 yyerror("value too small (min 0)");
1289 else
1290 cfg_parser->cfg->ip_dscp = atoi($2);
1291 free($2);
1292 }
1293 ;
12491294 server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG
12501295 {
12511296 OUTYY(("P(server_stream_wait_size:%s)\n", $2));
27182763 ;
27192764 contents_dt: contents_dt content_dt
27202765 | ;
2721 content_dt: dt_dnstap_enable | dt_dnstap_socket_path |
2766 content_dt: dt_dnstap_enable | dt_dnstap_socket_path | dt_dnstap_bidirectional |
2767 dt_dnstap_ip | dt_dnstap_tls | dt_dnstap_tls_server_name |
2768 dt_dnstap_tls_cert_bundle |
2769 dt_dnstap_tls_client_key_file | dt_dnstap_tls_client_cert_file |
27222770 dt_dnstap_send_identity | dt_dnstap_send_version |
27232771 dt_dnstap_identity | dt_dnstap_version |
27242772 dt_dnstap_log_resolver_query_messages |
27372785 free($2);
27382786 }
27392787 ;
2788 dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG
2789 {
2790 OUTYY(("P(dt_dnstap_bidirectional:%s)\n", $2));
2791 if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
2792 yyerror("expected yes or no.");
2793 else cfg_parser->cfg->dnstap_bidirectional =
2794 (strcmp($2, "yes")==0);
2795 free($2);
2796 }
2797 ;
27402798 dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG
27412799 {
27422800 OUTYY(("P(dt_dnstap_socket_path:%s)\n", $2));
27442802 cfg_parser->cfg->dnstap_socket_path = $2;
27452803 }
27462804 ;
2805 dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG
2806 {
2807 OUTYY(("P(dt_dnstap_ip:%s)\n", $2));
2808 free(cfg_parser->cfg->dnstap_ip);
2809 cfg_parser->cfg->dnstap_ip = $2;
2810 }
2811 ;
2812 dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG
2813 {
2814 OUTYY(("P(dt_dnstap_tls:%s)\n", $2));
2815 if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
2816 yyerror("expected yes or no.");
2817 else cfg_parser->cfg->dnstap_tls = (strcmp($2, "yes")==0);
2818 free($2);
2819 }
2820 ;
2821 dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG
2822 {
2823 OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", $2));
2824 free(cfg_parser->cfg->dnstap_tls_server_name);
2825 cfg_parser->cfg->dnstap_tls_server_name = $2;
2826 }
2827 ;
2828 dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG
2829 {
2830 OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", $2));
2831 free(cfg_parser->cfg->dnstap_tls_cert_bundle);
2832 cfg_parser->cfg->dnstap_tls_cert_bundle = $2;
2833 }
2834 ;
2835 dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG
2836 {
2837 OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", $2));
2838 free(cfg_parser->cfg->dnstap_tls_client_key_file);
2839 cfg_parser->cfg->dnstap_tls_client_key_file = $2;
2840 }
2841 ;
2842 dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG
2843 {
2844 OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", $2));
2845 free(cfg_parser->cfg->dnstap_tls_client_cert_file);
2846 cfg_parser->cfg->dnstap_tls_client_cert_file = $2;
2847 }
2848 ;
27472849 dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG
27482850 {
27492851 OUTYY(("P(dt_dnstap_send_identity:%s)\n", $2));
28492951 {
28502952 OUTYY(("P(python-script:%s)\n", $2));
28512953 if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, $2))
2954 yyerror("out of memory");
2955 }
2956 dynlibstart: VAR_DYNLIB
2957 {
2958 OUTYY(("\nP(dynlib:)\n"));
2959 }
2960 ;
2961 contents_dl: contents_dl content_dl
2962 | ;
2963 content_dl: dl_file
2964 ;
2965 dl_file: VAR_DYNLIB_FILE STRING_ARG
2966 {
2967 OUTYY(("P(dynlib-file:%s)\n", $2));
2968 if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, $2))
28522969 yyerror("out of memory");
28532970 }
28542971 server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG
30023119 contents_cachedb: contents_cachedb content_cachedb
30033120 | ;
30043121 content_cachedb: cachedb_backend_name | cachedb_secret_seed |
3005 redis_server_host | redis_server_port | redis_timeout
3122 redis_server_host | redis_server_port | redis_timeout |
3123 redis_expire_records
30063124 ;
30073125 cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG
30083126 {
30623180 if(atoi($2) == 0)
30633181 yyerror("redis timeout value expected");
30643182 else cfg_parser->cfg->redis_timeout = atoi($2);
3183 #else
3184 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
3185 #endif
3186 free($2);
3187 }
3188 ;
3189 redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG
3190 {
3191 #if defined(USE_CACHEDB) && defined(USE_REDIS)
3192 OUTYY(("P(redis_expire_records:%s)\n", $2));
3193 if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
3194 yyerror("expected yes or no.");
3195 else cfg_parser->cfg->redis_expire_records = (strcmp($2, "yes")==0);
30653196 #else
30663197 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
30673198 #endif
8080 #ifdef WITH_PYTHONMODULE
8181 #include "pythonmod/pythonmod.h"
8282 #endif
83 #ifdef WITH_DYNLIBMODULE
84 #include "dynlibmod/dynlibmod.h"
85 #endif
8386 #ifdef USE_CACHEDB
8487 #include "cachedb/cachedb.h"
8588 #endif
9194 #endif
9295 #ifdef USE_IPSET
9396 #include "ipset/ipset.h"
97 #endif
98 #ifdef USE_DNSTAP
99 #include "dnstap/dtstream.h"
94100 #endif
95101
96102 int
167173 else if(fptr == &tube_handle_signal) return 1;
168174 else if(fptr == &comm_base_handle_slow_accept) return 1;
169175 else if(fptr == &comm_point_http_handle_callback) return 1;
176 #ifdef USE_DNSTAP
177 else if(fptr == &dtio_output_cb) return 1;
178 else if(fptr == &dtio_cmd_cb) return 1;
179 else if(fptr == &dtio_reconnect_timeout_cb) return 1;
180 else if(fptr == &dtio_stop_timer_cb) return 1;
181 else if(fptr == &dtio_stop_ev_cb) return 1;
182 else if(fptr == &dtio_tap_callback) return 1;
183 else if(fptr == &dtio_mainfdcallback) return 1;
184 #endif
170185 #ifdef UB_ON_WINDOWS
171186 else if(fptr == &worker_win_stop_cb) return 1;
172187 #endif
379394 #ifdef WITH_PYTHONMODULE
380395 else if(fptr == &pythonmod_init) return 1;
381396 #endif
397 #ifdef WITH_DYNLIBMODULE
398 else if(fptr == &dynlibmod_init) return 1;
399 #endif
382400 #ifdef USE_CACHEDB
383401 else if(fptr == &cachedb_init) return 1;
384402 #endif
404422 #ifdef WITH_PYTHONMODULE
405423 else if(fptr == &pythonmod_deinit) return 1;
406424 #endif
425 #ifdef WITH_DYNLIBMODULE
426 else if(fptr == &dynlibmod_deinit) return 1;
427 #endif
407428 #ifdef USE_CACHEDB
408429 else if(fptr == &cachedb_deinit) return 1;
409430 #endif
430451 #ifdef WITH_PYTHONMODULE
431452 else if(fptr == &pythonmod_operate) return 1;
432453 #endif
454 #ifdef WITH_DYNLIBMODULE
455 else if(fptr == &dynlibmod_operate) return 1;
456 #endif
433457 #ifdef USE_CACHEDB
434458 else if(fptr == &cachedb_operate) return 1;
435459 #endif
456480 #ifdef WITH_PYTHONMODULE
457481 else if(fptr == &pythonmod_inform_super) return 1;
458482 #endif
483 #ifdef WITH_DYNLIBMODULE
484 else if(fptr == &dynlibmod_inform_super) return 1;
485 #endif
459486 #ifdef USE_CACHEDB
460487 else if(fptr == &cachedb_inform_super) return 1;
461488 #endif
482509 #ifdef WITH_PYTHONMODULE
483510 else if(fptr == &pythonmod_clear) return 1;
484511 #endif
512 #ifdef WITH_DYNLIBMODULE
513 else if(fptr == &dynlibmod_clear) return 1;
514 #endif
485515 #ifdef USE_CACHEDB
486516 else if(fptr == &cachedb_clear) return 1;
487517 #endif
506536 else if(fptr == &respip_get_mem) return 1;
507537 #ifdef WITH_PYTHONMODULE
508538 else if(fptr == &pythonmod_get_mem) return 1;
539 #endif
540 #ifdef WITH_DYNLIBMODULE
541 else if(fptr == &dynlibmod_get_mem) return 1;
509542 #endif
510543 #ifdef USE_CACHEDB
511544 else if(fptr == &cachedb_get_mem) return 1;
565598 #ifdef WITH_PYTHONMODULE
566599 if(fptr == &python_inplace_cb_reply_generic) return 1;
567600 #endif
601 #ifdef WITH_DYNLIBMODULE
602 if(fptr == &dynlib_inplace_cb_reply_generic) return 1;
603 #endif
568604 } else if(type == inplace_cb_reply_cache) {
569605 #ifdef WITH_PYTHONMODULE
570606 if(fptr == &python_inplace_cb_reply_generic) return 1;
571607 #endif
608 #ifdef WITH_DYNLIBMODULE
609 if(fptr == &dynlib_inplace_cb_reply_generic) return 1;
610 #endif
572611 } else if(type == inplace_cb_reply_local) {
573612 #ifdef WITH_PYTHONMODULE
574613 if(fptr == &python_inplace_cb_reply_generic) return 1;
575614 #endif
615 #ifdef WITH_DYNLIBMODULE
616 if(fptr == &dynlib_inplace_cb_reply_generic) return 1;
617 #endif
576618 } else if(type == inplace_cb_reply_servfail) {
577619 #ifdef WITH_PYTHONMODULE
578620 if(fptr == &python_inplace_cb_reply_generic) return 1;
621 #endif
622 #ifdef WITH_DYNLIBMODULE
623 if(fptr == &dynlib_inplace_cb_reply_generic) return 1;
579624 #endif
580625 }
581626 return 0;
589634 #endif
590635 #ifdef WITH_PYTHONMODULE
591636 if(fptr == &python_inplace_cb_query_generic)
637 return 1;
638 #endif
639 #ifdef WITH_DYNLIBMODULE
640 if(fptr == &dynlib_inplace_cb_query_generic)
592641 return 1;
593642 #endif
594643 (void)fptr;
604653 #else
605654 (void)fptr;
606655 #endif
656 #ifdef WITH_DYNLIBMODULE
657 if(fptr == &dynlib_inplace_cb_edns_back_parsed)
658 return 1;
659 #endif
607660 return 0;
608661 }
609662
616669 #else
617670 (void)fptr;
618671 #endif
672 #ifdef WITH_DYNLIBMODULE
673 if(fptr == &dynlib_inplace_cb_query_response)
674 return 1;
675 #endif
619676 return 0;
620677 }
621678
37703770 4188,
37713771 4191,
37723772 4192,
3773 4195,
37733774 4197,
37743775 4199,
37753776 4300,
45384539 6850,
45394540 6868,
45404541 6888,
4542 6924,
45414543 6935,
45424544 6936,
45434545 6946,
52285230 18241,
52295231 18262,
52305232 18463,
5233 18516,
52315234 18634,
52325235 18635,
52335236 18668,
120120 /**
121121 * Revert identity to print, back to the recorded default value.
122122 */
123 void log_ident_revert_to_default();
123 void log_ident_revert_to_default(void);
124124
125125 /**
126126 * Set identity to print if there is an identity, otherwise
5252 #define MINI_EVENT_H
5353
5454 #if defined(USE_MINI_EVENT) && !defined(USE_WINSOCK)
55
56 #include <sys/time.h>
5557
5658 #ifndef HAVE_EVENT_BASE_FREE
5759 #define HAVE_EVENT_BASE_FREE
5454 #ifdef HAVE_OPENSSL_ERR_H
5555 #include <openssl/err.h>
5656 #endif
57 #ifdef HAVE_OPENSSL_CORE_NAMES_H
58 #include <openssl/core_names.h>
59 #endif
5760 #ifdef USE_WINSOCK
5861 #include <wincrypt.h>
5962 #endif
6669 /** minimal responses when positive answer: default is no */
6770 int MINIMAL_RESPONSES = 0;
6871
69 /** rrset order roundrobin: default is no */
70 int RRSET_ROUNDROBIN = 0;
72 /** rrset order roundrobin: default is yes */
73 int RRSET_ROUNDROBIN = 1;
7174
7275 /** log tag queries with name instead of 'info' for filtering */
7376 int LOG_TAG_QUERYREPLY = 0;
7780 unsigned char *aes_key;
7881 unsigned char *hmac_key;
7982 } *ticket_keys;
83
84 /**
85 * callback TLS session ticket encrypt and decrypt
86 * For use with SSL_CTX_set_tlsext_ticket_key_cb or
87 * SSL_CTX_set_tlsext_ticket_key_evp_cb
88 * @param s: the SSL_CTX to use (from connect_sslctx_create())
89 * @param key_name: secret name, 16 bytes
90 * @param iv: up to EVP_MAX_IV_LENGTH.
91 * @param evp_ctx: the evp cipher context, function sets this.
92 * @param hmac_ctx: the hmac context, function sets this.
93 * with ..key_cb it is of type HMAC_CTX*
94 * with ..key_evp_cb it is of type EVP_MAC_CTX*
95 * @param enc: 1 is encrypt, 0 is decrypt
96 * @return 0 on no ticket, 1 for okay, and 2 for okay but renew the ticket
97 * (the ticket is decrypt only). and <0 for failures.
98 */
99 #ifdef HAVE_SSL
100 int tls_session_ticket_key_cb(SSL *s, unsigned char* key_name,
101 unsigned char* iv, EVP_CIPHER_CTX *evp_ctx,
102 #ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB
103 EVP_MAC_CTX *hmac_ctx,
104 #else
105 HMAC_CTX* hmac_ctx,
106 #endif
107 int enc);
108 #endif /* HAVE_SSL */
80109
81110 /* returns true is string addr is an ip6 specced address */
82111 int
828857 #endif /* HAVE_SSL */
829858 }
830859
860 #ifdef HAVE_SSL
861 /** log certificate details */
862 void
863 log_cert(unsigned level, const char* str, void* cert)
864 {
865 BIO* bio;
866 char nul = 0;
867 char* pp = NULL;
868 long len;
869 if(verbosity < level) return;
870 bio = BIO_new(BIO_s_mem());
871 if(!bio) return;
872 X509_print_ex(bio, (X509*)cert, 0, (unsigned long)-1
873 ^(X509_FLAG_NO_SUBJECT
874 |X509_FLAG_NO_ISSUER|X509_FLAG_NO_VALIDITY
875 |X509_FLAG_NO_EXTENSIONS|X509_FLAG_NO_AUX
876 |X509_FLAG_NO_ATTRIBUTES));
877 BIO_write(bio, &nul, (int)sizeof(nul));
878 len = BIO_get_mem_data(bio, &pp);
879 if(len != 0 && pp) {
880 verbose(level, "%s: \n%s", str, pp);
881 }
882 BIO_free(bio);
883 }
884 #endif /* HAVE_SSL */
885
831886 int
832887 listen_sslctx_setup(void* ctxt)
833888 {
9691024 }
9701025 SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file(
9711026 verifypem));
972 SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
1027 SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL);
9731028 }
9741029 return ctx;
9751030 #else
11901245 #endif
11911246 }
11921247
1248 int check_auth_name_for_ssl(char* auth_name)
1249 {
1250 if(!auth_name) return 1;
1251 #if defined(HAVE_SSL) && !defined(HAVE_SSL_SET1_HOST) && !defined(HAVE_X509_VERIFY_PARAM_SET1_HOST)
1252 log_err("the query has an auth_name %s, but libssl has no call to "
1253 "perform TLS authentication. Remove that name from config "
1254 "or upgrade the ssl crypto library.", auth_name);
1255 return 0;
1256 #else
1257 return 1;
1258 #endif
1259 }
1260
1261 /** set the authname on an SSL structure, SSL* ssl */
1262 int set_auth_name_on_ssl(void* ssl, char* auth_name, int use_sni)
1263 {
1264 if(!auth_name) return 1;
1265 #ifdef HAVE_SSL
1266 if(use_sni) {
1267 (void)SSL_set_tlsext_host_name(ssl, auth_name);
1268 }
1269 #else
1270 (void)ssl;
1271 (void)use_sni;
1272 #endif
1273 #ifdef HAVE_SSL_SET1_HOST
1274 SSL_set_verify(ssl, SSL_VERIFY_PEER, NULL);
1275 /* setting the hostname makes openssl verify the
1276 * host name in the x509 certificate in the
1277 * SSL connection*/
1278 if(!SSL_set1_host(ssl, auth_name)) {
1279 log_err("SSL_set1_host failed");
1280 return 0;
1281 }
1282 #elif defined(HAVE_X509_VERIFY_PARAM_SET1_HOST)
1283 /* openssl 1.0.2 has this function that can be used for
1284 * set1_host like verification */
1285 if(auth_name) {
1286 X509_VERIFY_PARAM* param = SSL_get0_param(ssl);
1287 # ifdef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
1288 X509_VERIFY_PARAM_set_hostflags(param, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
1289 # endif
1290 if(!X509_VERIFY_PARAM_set1_host(param, auth_name, strlen(auth_name))) {
1291 log_err("X509_VERIFY_PARAM_set1_host failed");
1292 return 0;
1293 }
1294 SSL_set_verify(ssl, SSL_VERIFY_PEER, NULL);
1295 }
1296 #else
1297 verbose(VERB_ALGO, "the query has an auth_name, but libssl has no call to perform TLS authentication");
1298 #endif /* HAVE_SSL_SET1_HOST */
1299 return 1;
1300 }
1301
11931302 #if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) && defined(CRYPTO_LOCK) && OPENSSL_VERSION_NUMBER < 0x10100000L
11941303 /** global lock list for openssl locks */
11951304 static lock_basic_type *ub_openssl_locks = NULL;
12841393 if(!data)
12851394 return 0;
12861395
1287 f = fopen(p->str, "r");
1396 f = fopen(p->str, "rb");
12881397 if(!f) {
12891398 log_err("could not read tls-session-ticket-key %s: %s", p->str, strerror(errno));
12901399 free(data);
13071416 }
13081417 /* terminate array with NULL key name entry */
13091418 keys->key_name = NULL;
1419 # ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB
1420 if(SSL_CTX_set_tlsext_ticket_key_evp_cb(sslctx, tls_session_ticket_key_cb) == 0) {
1421 log_err("no support for TLS session ticket");
1422 return 0;
1423 }
1424 # else
13101425 if(SSL_CTX_set_tlsext_ticket_key_cb(sslctx, tls_session_ticket_key_cb) == 0) {
13111426 log_err("no support for TLS session ticket");
13121427 return 0;
13131428 }
1429 # endif
13141430 return 1;
13151431 #else
13161432 (void)sslctx;
13201436
13211437 }
13221438
1323 int tls_session_ticket_key_cb(void *ATTR_UNUSED(sslctx), unsigned char* key_name, unsigned char* iv, void *evp_sctx, void *hmac_ctx, int enc)
1324 {
13251439 #ifdef HAVE_SSL
1440 int tls_session_ticket_key_cb(SSL *ATTR_UNUSED(sslctx), unsigned char* key_name,
1441 unsigned char* iv, EVP_CIPHER_CTX *evp_sctx,
1442 #ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB
1443 EVP_MAC_CTX *hmac_ctx,
1444 #else
1445 HMAC_CTX* hmac_ctx,
1446 #endif
1447 int enc)
1448 {
1449 #ifdef HAVE_SSL
1450 # ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB
1451 OSSL_PARAM params[3];
1452 # else
13261453 const EVP_MD *digest;
1454 # endif
13271455 const EVP_CIPHER *cipher;
13281456 int evp_cipher_length;
1457 # ifndef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB
13291458 digest = EVP_sha256();
1459 # endif
13301460 cipher = EVP_aes_256_cbc();
13311461 evp_cipher_length = EVP_CIPHER_iv_length(cipher);
13321462 if( enc == 1 ) {
13411471 verbose(VERB_CLIENT, "EVP_EncryptInit_ex failed");
13421472 return -1;
13431473 }
1344 #ifndef HMAC_INIT_EX_RETURNS_VOID
1474 #ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB
1475 params[0] = OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY,
1476 ticket_keys->hmac_key, 32);
1477 params[1] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST,
1478 "sha256", 0);
1479 params[2] = OSSL_PARAM_construct_end();
1480 EVP_MAC_set_ctx_params(hmac_ctx, params);
1481 #elif !defined(HMAC_INIT_EX_RETURNS_VOID)
13451482 if (HMAC_Init_ex(hmac_ctx, ticket_keys->hmac_key, 32, digest, NULL) != 1) {
13461483 verbose(VERB_CLIENT, "HMAC_Init_ex failed");
13471484 return -1;
13651502 return 0;
13661503 }
13671504
1368 #ifndef HMAC_INIT_EX_RETURNS_VOID
1505 #ifdef HAVE_SSL_CTX_SET_TLSEXT_TICKET_KEY_EVP_CB
1506 params[0] = OSSL_PARAM_construct_octet_string(OSSL_KDF_PARAM_KEY,
1507 key->hmac_key, 32);
1508 params[1] = OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST,
1509 "sha256", 0);
1510 params[2] = OSSL_PARAM_construct_end();
1511 EVP_MAC_set_ctx_params(hmac_ctx, params);
1512 #elif !defined(HMAC_INIT_EX_RETURNS_VOID)
13691513 if (HMAC_Init_ex(hmac_ctx, key->hmac_key, 32, digest, NULL) != 1) {
13701514 verbose(VERB_CLIENT, "HMAC_Init_ex failed");
13711515 return -1;
13901534 return 0;
13911535 #endif
13921536 }
1537 #endif /* HAVE_SSL */
13931538
13941539 void
13951540 listen_sslctx_delete_ticket_keys(void)
385385 void log_crypto_err_code(const char* str, unsigned long err);
386386
387387 /**
388 * Log certificate details verbosity, string, of X509 cert
389 * @param level: verbosity level
390 * @param str: string to prefix on output
391 * @param cert: X509* structure.
392 */
393 void log_cert(unsigned level, const char* str, void* cert);
394
395 /**
388396 * Set SSL_OP_NOxxx options on SSL context to disable bad crypto
389397 * @param ctxt: SSL_CTX*
390398 * @return false on failure.
434442 void* outgoing_ssl_fd(void* sslctx, int fd);
435443
436444 /**
445 * check if authname SSL functionality is available, false if not
446 * @param auth_name: the name for the remote server, used for error print.
447 * @return false if SSL functionality to check the SSL name is not available.
448 */
449 int check_auth_name_for_ssl(char* auth_name);
450
451 /**
452 * set auth name on SSL for verification
453 * @param ssl: SSL* to set
454 * @param auth_name: if NULL nothing happens, otherwise the name to check.
455 * @param use_sni: if SNI will be used.
456 * @return 1 on success or NULL auth_name, 0 on failure.
457 */
458 int set_auth_name_on_ssl(void* ssl, char* auth_name, int use_sni);
459
460 /**
437461 * Initialize openssl locking for thread safety
438462 * @return false on failure (alloc failure).
439463 */
452476 */
453477 int listen_sslctx_setup_ticket_keys(void* sslctx,
454478 struct config_strlist* tls_session_ticket_keys);
455
456 /**
457 * callback TLS session ticket encrypt and decrypt
458 * For use with SSL_CTX_set_tlsext_ticket_key_cb
459 * @param s: the SSL_CTX to use (from connect_sslctx_create())
460 * @param key_name: secret name, 16 bytes
461 * @param iv: up to EVP_MAX_IV_LENGTH.
462 * @param evp_ctx: the evp cipher context, function sets this.
463 * @param hmac_ctx: the hmax context, function sets this.
464 * @param enc: 1 is encrypt, 0 is decrypt
465 * @return 0 on no ticket, 1 for okay, and 2 for okay but renew the ticket
466 * (the ticket is decrypt only). and <0 for failures.
467 */
468 int tls_session_ticket_key_cb(void *s, unsigned char* key_name,unsigned char* iv, void *evp_ctx, void *hmac_ctx, int enc);
469479
470480 /** Free memory used for TLS session ticket keys */
471481 void listen_sslctx_delete_ticket_keys(void);
446446 ssize_t sent;
447447 struct msghdr msg;
448448 struct iovec iov[1];
449 char control[256];
449 union {
450 struct cmsghdr hdr;
451 char buf[256];
452 } control;
450453 #ifndef S_SPLINT_S
451454 struct cmsghdr *cmsg;
452455 #endif /* S_SPLINT_S */
464467 iov[0].iov_len = sldns_buffer_remaining(packet);
465468 msg.msg_iov = iov;
466469 msg.msg_iovlen = 1;
467 msg.msg_control = control;
470 msg.msg_control = control.buf;
468471 #ifndef S_SPLINT_S
469 msg.msg_controllen = sizeof(control);
472 msg.msg_controllen = sizeof(control.buf);
470473 #endif /* S_SPLINT_S */
471474 msg.msg_flags = 0;
472475
476479 #ifdef IP_PKTINFO
477480 void* cmsg_data;
478481 msg.msg_controllen = CMSG_SPACE(sizeof(struct in_pktinfo));
479 log_assert(msg.msg_controllen <= sizeof(control));
482 log_assert(msg.msg_controllen <= sizeof(control.buf));
480483 cmsg->cmsg_level = IPPROTO_IP;
481484 cmsg->cmsg_type = IP_PKTINFO;
482485 memmove(CMSG_DATA(cmsg), &r->pktinfo.v4info,
487490 cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
488491 #elif defined(IP_SENDSRCADDR)
489492 msg.msg_controllen = CMSG_SPACE(sizeof(struct in_addr));
490 log_assert(msg.msg_controllen <= sizeof(control));
493 log_assert(msg.msg_controllen <= sizeof(control.buf));
491494 cmsg->cmsg_level = IPPROTO_IP;
492495 cmsg->cmsg_type = IP_SENDSRCADDR;
493496 memmove(CMSG_DATA(cmsg), &r->pktinfo.v4addr,
500503 } else if(r->srctype == 6) {
501504 void* cmsg_data;
502505 msg.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo));
503 log_assert(msg.msg_controllen <= sizeof(control));
506 log_assert(msg.msg_controllen <= sizeof(control.buf));
504507 cmsg->cmsg_level = IPPROTO_IPV6;
505508 cmsg->cmsg_type = IPV6_PKTINFO;
506509 memmove(CMSG_DATA(cmsg), &r->pktinfo.v6info,
512515 } else {
513516 /* try to pass all 0 to use default route */
514517 msg.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo));
515 log_assert(msg.msg_controllen <= sizeof(control));
518 log_assert(msg.msg_controllen <= sizeof(control.buf));
516519 cmsg->cmsg_level = IPPROTO_IPV6;
517520 cmsg->cmsg_type = IPV6_PKTINFO;
518521 memset(CMSG_DATA(cmsg), 0, sizeof(struct in6_pktinfo));
583586 struct msghdr msg;
584587 struct iovec iov[1];
585588 ssize_t rcv;
586 char ancil[256];
589 union {
590 struct cmsghdr hdr;
591 char buf[256];
592 } ancil;
587593 int i;
588594 #ifndef S_SPLINT_S
589595 struct cmsghdr* cmsg;
607613 iov[0].iov_len = sldns_buffer_remaining(rep.c->buffer);
608614 msg.msg_iov = iov;
609615 msg.msg_iovlen = 1;
610 msg.msg_control = ancil;
616 msg.msg_control = ancil.buf;
611617 #ifndef S_SPLINT_S
612 msg.msg_controllen = sizeof(ancil);
618 msg.msg_controllen = sizeof(ancil.buf);
613619 #endif /* S_SPLINT_S */
614620 msg.msg_flags = 0;
615621 rcv = recvmsg(fd, &msg, 0);
10261032 }
10271033
10281034 #ifdef HAVE_SSL
1029 /** log certificate details */
1030 static void
1031 log_cert(unsigned level, const char* str, X509* cert)
1032 {
1033 BIO* bio;
1034 char nul = 0;
1035 char* pp = NULL;
1036 long len;
1037 if(verbosity < level) return;
1038 bio = BIO_new(BIO_s_mem());
1039 if(!bio) return;
1040 X509_print_ex(bio, cert, 0, (unsigned long)-1
1041 ^(X509_FLAG_NO_SUBJECT
1042 |X509_FLAG_NO_ISSUER|X509_FLAG_NO_VALIDITY
1043 |X509_FLAG_NO_EXTENSIONS|X509_FLAG_NO_AUX
1044 |X509_FLAG_NO_ATTRIBUTES));
1045 BIO_write(bio, &nul, (int)sizeof(nul));
1046 len = BIO_get_mem_data(bio, &pp);
1047 if(len != 0 && pp) {
1048 verbose(level, "%s: \n%s", str, pp);
1049 }
1050 BIO_free(bio);
1051 }
1052 #endif /* HAVE_SSL */
1053
1054 #ifdef HAVE_SSL
10551035 /** true if the ssl handshake error has to be squelched from the logs */
1056 static int
1036 int
10571037 squelch_err_ssl_handshake(unsigned long err)
10581038 {
10591039 if(verbosity >= VERB_QUERY)
31823162 if(repinfo->c->tcp_parent->dtenv != NULL &&
31833163 repinfo->c->tcp_parent->dtenv->log_client_response_messages)
31843164 dt_msg_send_client_response(repinfo->c->tcp_parent->dtenv,
3185 &repinfo->addr, repinfo->c->type, repinfo->c->buffer);
3165 &repinfo->addr, repinfo->c->type,
3166 ( repinfo->c->tcp_req_info
3167 ? repinfo->c->tcp_req_info->spool_buffer
3168 : repinfo->c->buffer ));
31863169 #endif
31873170 if(repinfo->c->tcp_req_info) {
31883171 tcp_req_info_send_reply(repinfo->c->tcp_req_info);
782782 void comm_point_tcp_win_bio_cb(struct comm_point* c, void* ssl);
783783 #endif
784784
785 /** see if errno for tcp connect has to be logged or not. This uses errno */
785 /**
786 * See if errno for tcp connect has to be logged or not. This uses errno
787 * @param addr: apart from checking errno, the addr is checked for ip4mapped
788 * and broadcast type, hence passed.
789 * @param addrlen: length of the addr parameter.
790 * @return true if it needs to be logged.
791 */
786792 int tcp_connect_errno_needs_log(struct sockaddr* addr, socklen_t addrlen);
787793
794 #ifdef HAVE_SSL
795 /**
796 * True if the ssl handshake error has to be squelched from the logs
797 * @param err: the error returned by the openssl routine, ERR_get_error.
798 * This is a packed structure with elements that are examined.
799 * @return true if the error is squelched (not logged).
800 */
801 int squelch_err_ssl_handshake(unsigned long err);
802 #endif
803
788804 #endif /* NET_EVENT_H */
284284 shm_stat->mem.ipsecmod = (long long)mod_get_mem(&worker->env,
285285 "ipsecmod");
286286 #endif
287 #ifdef WITH_DYNLIBMODULE
288 shm_stat->mem.dynlib = (long long)mod_get_mem(&worker->env,
289 "dynlib");
290 #endif
287291 }
288292
289293 server_stats_add(stat_total, stat_info);
147147 return event_get_version();
148148 }
149149
150 #if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EVBACKEND_SELECT)
150 #if (defined(HAVE_EV_LOOP) || defined(HAVE_EV_DEFAULT_LOOP)) && defined(EV_FEATURE_BACKENDS)
151151 static const char* ub_ev_backend2str(int b)
152152 {
153153 switch(b) {
183183 *n = "libev";
184184 if (!b)
185185 b = (struct event_base*)ev_default_loop(EVFLAG_AUTO);
186 # ifdef EVBACKEND_SELECT
186 # ifdef EV_FEATURE_BACKENDS
187187 *m = ub_ev_backend2str(ev_backend((struct ev_loop*)b));
188188 # else
189189 *m = "not obtainable";
7676 #include <openssl/engine.h>
7777 #endif
7878
79 #if defined(HAVE_OPENSSL_DSA_H) && defined(USE_DSA)
80 #include <openssl/dsa.h>
81 #endif
82
7983 /**
8084 * Output a libcrypto openssl error to the logfile.
8185 * @param str: string to add to it.
17451749 res &= nettle_ecdsa_verify (&pubkey, SHA256_DIGEST_SIZE, digest, &signature);
17461750 mpz_clear(x);
17471751 mpz_clear(y);
1752 nettle_ecc_point_clear(&pubkey);
17481753 break;
17491754 }
17501755 case SHA384_DIGEST_SIZE:
13421342 if(ve->date_override) {
13431343 now = ve->date_override;
13441344 } else now = (int32_t)unow;
1345 expittl = expi - now;
1345 expittl = (int32_t)((uint32_t)expi - (uint32_t)now);
13461346
13471347 /* so now:
13481348 * d->ttl: rrset ttl read from message or cache. May be reduced